PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CiAgICA8dGl0bGU+CiAgICAgIFNwYWNlIE9wdGltaXplZCBDaXJjdWxhciBCdWZmZXIKICAgIDwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Jvb3N0LmNzcyIgdHlwZT0idGV4dC9jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT4KICAgICAgU3BhY2UgT3B0aW1pemVkIENpcmN1bGFyIEJ1ZmZlcgogICAgPC9oMT4KICAgIDx0YWJsZSBpZD0idGl0bGUiIGJvcmRlcj0iMCI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+CiAgICAgICAgICA8aDE+CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7CiAgICAgICAgICA8L2gxPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iLi4vLi4vLi4vIj48aW1nIHNyYz0iLi4vLi4vLi4vYm9vc3QucG5nIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBhbHQ9IkJvb3N0IiBib3JkZXI9IjAiPjwvYT4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDxoMj4KICAgICAgQ29udGVudHMKICAgIDwvaDI+PGEgaHJlZj0iI2Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT48YnI+CiAgICA8YSBocmVmPSIjc3lub3BzaXMiPlN5bm9wc2lzPC9hPjxicj4KICAgIDxhIGhyZWY9IiNyYXRpb25hbGUiPlJhdGlvbmFsZTwvYT48YnI+CiAgICA8YSBocmVmPSIjaGVhZGVyIj5IZWFkZXIgRmlsZXM8L2E+PGJyPgogICAgPGEgaHJlZj0iI21vZGVsIj5Nb2RlbGxlZCBjb25jZXB0czwvYT48YnI+CiAgICA8YSBocmVmPSIjdHlwZXMiPlNwZWNpZmljIFB1YmxpYyBUeXBlczwvYT48YnI+CiAgICA8YSBocmVmPSIjY29uc3RydWN0b3JzIj5Db25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3I8L2E+PGJyPgogICAgPGEgaHJlZj0iI21ldGhvZHMiPlNwZWNpZmljIFB1YmxpYyBNZW1iZXIgRnVuY3Rpb25zPC9hPjxicj4KICAgIDxhIGhyZWY9IiNzZWUiPlNlZSBhbHNvPC9hPjxicj4KICAgIDxhIGhyZWY9IiNhY2siPkFja25vd2xlZGdlbWVudHM8L2E+PGJyPgogICAgPGEgaHJlZj0iI3JlbG5vdGVzIj5SZWxlYXNlIE5vdGVzPC9hPgogICAgPGgyPgogICAgICA8YSBuYW1lPSJkZXNjcmlwdGlvbiIgaWQ9ImRlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KICAgIDwvaDI+CiAgICA8cD4KICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGNvbnRhaW5lciBpcyBhbiBhZGFwdG9yIG9mIHRoZSA8Y29kZT48YSBocmVmPQogICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwiPmNpcmN1bGFyX2J1ZmZlcjwvYT48L2NvZGU+LiBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUKICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgc2ltaWxhciB0byB0aGUgYmFzZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+IGV4Y2VwdCBpdCBkb2VzCiAgICAgIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYXQgb25jZSB3aGVuIGNyZWF0ZWQgcmF0aGVyIGl0IGFsbG9jYXRlcyBtZW1vcnkgYXMgbmVlZGVkLiAoVGhlIHByZWRpY3RpdmUgbWVtb3J5IGFsbG9jYXRpb24KICAgICAgaXMgc2ltaWxhciB0byB0eXBpY2FsIDxjb2RlPnN0ZDo6dmVjdG9yPC9jb2RlPiBpbXBsZW1lbnRhdGlvbi4pIE1vcmVvdmVyIHRoZSBtZW1vcnkgaXMgYXV0b21hdGljYWxseSBmcmVlZCBhcyB0aGUKICAgICAgc2l6ZSBvZiB0aGUgY29udGFpbmVyIGRlY3JlYXNlcy4KICAgIDwvcD4KICAgIDx0YWJsZSBpZD0iZmlndXJlIiBib3JkZXI9IjAiPgogICAgICA8dHI+CiAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGltZyBzcmM9InNwYWNlX29wdGltaXplZC5wbmciIHdpZHRoPSI3MDAiIGhlaWdodD0iMzUwIiBhbHQ9IlNwYWNlIE9wdGltaXplZCBDaXJjdWxhciBCdWZmZXIiIGJvcmRlcj0iMCI+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAgICAgICA8Yj5GaWd1cmU6PC9iPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgICAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzIG9mIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyLiBUaGUgPGNvZGU+bWluX2NhcGFjaXR5KCk8L2NvZGU+IG9mIHRoZQogICAgICAgICAgPGEgaHJlZj0iI3R5cGVzIj5jYXBhY2l0eSBjb250cm9sbGVyPC9hPiByZXByZXNlbnRzIHRoZSBtaW5pbWFsIGd1YXJhbnRlZWQgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkuIFRoZQogICAgICAgICAgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIG5ldmVyIGRyb3AgdW5kZXIgdGhpcyB2YWx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIDxjb2RlPm1pbl9jYXBhY2l0eSgpPC9jb2RlPiBpcwogICAgICAgICAgc2V0IHRvIDxjb2RlPjA8L2NvZGU+LgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgogICAgPGgyPgogICAgICA8YSBuYW1lPSJzeW5vcHNpcyIgaWQ9InN5bm9wc2lzIj5TeW5vcHNpczwvYT4KICAgIDwvaDI+CiAgICA8cD4KICAgICAgTm90ZSB0aGF0IHNvbWUgb2YgdGhlIGxpbmtzIHBvaW50IHRvIHRoZSBvcmlnaW5hbCA8Y29kZT48YSBocmVmPSJjaXJjdWxhcl9idWZmZXIuaHRtbCI+Y2lyY3VsYXJfYnVmZmVyPC9hPjwvY29kZT4KICAgICAgaWYgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgdGhlIHNhbWUuCiAgICA8L3A+CiAgICA8ZGl2IGlkPSJzcmNkb2Nfc3lub3BzaXMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX3N5bm9wc2lzIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxMCI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8cHJlPgpuYW1lc3BhY2UgYm9vc3QgewoKdGVtcGxhdGUgJmx0O2NsYXNzIDxhIGhyZWY9ImNpcmN1bGFyX2J1ZmZlci5odG1sI3RlbXBsYXRlcGFyYW1fVCI+VDwvYT4sIGNsYXNzIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCN0ZW1wbGF0ZXBhcmFtX0FsbG9jIj5BbGxvYzwvYT4mZ3Q7CmNsYXNzIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQKewpwdWJsaWM6CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnZhbHVlX3R5cGUgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xY2JkZDdjYTg3ZTE0N2MwOGNkMmJlMjY3ZWVmZDY1NDAiPnZhbHVlX3R5cGU8L2E+OwogICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jOjpwb2ludGVyIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRmZjkxN2Y4YTYxMzFlYzE4ZTkxNjA2NzI3NTkyYTljIj5wb2ludGVyPC9hPjsKICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvYzo6Y29uc3RfcG9pbnRlciA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5MGY3YzZiY2I2MjRhZDUwN2RlNTQ2MzY2ZjQ5MDI4YSI+Y29uc3RfcG9pbnRlcjwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OnJlZmVyZW5jZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFmMzhhOWJjNjRkODQ3NTdjNjYxYzI1NDJmZjlhN2Y2NSI+cmVmZXJlbmNlPC9hPjsKICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvYzo6Y29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+OwogICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jOjpzaXplX3R5cGUgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT47CiAgIHR5cGVkZWYgdHlwZW5hbWUgQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1MzEzZTcyM2ZhODVkNzNkYjU4MjZmOGI3MjJhYTJhOSI+ZGlmZmVyZW5jZV90eXBlPC9hPjsKICAgdHlwZWRlZiBBbGxvYyA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+OwogICB0eXBlZGVmIDxpPmltcGxlbWVudGF0aW9uLWRlZmluZWQ8L2k+IDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVjYWI2ZDQ2ZjAzYzQwZDFlNTJkNDE4NDMzMTlkZGI5Ij5jb25zdF9pdGVyYXRvcjwvYT47CiAgIHR5cGVkZWYgPGk+aW1wbGVtZW50YXRpb24tZGVmaW5lZDwvaT4gPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPjsKICAgdHlwZWRlZiBib29zdDo6cmV2ZXJzZV9pdGVyYXRvciZsdDtjb25zdF9pdGVyYXRvciZndDsgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYzczMTc3MDFiNTExYmM1ZjdhNjYzYjA2YjUzZTJiNzMiPmNvbnN0X3JldmVyc2VfaXRlcmF0b3I8L2E+OwogICB0eXBlZGVmIGJvb3N0OjpyZXZlcnNlX2l0ZXJhdG9yJmx0O2l0ZXJhdG9yJmd0OyA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwMDJmYjg5MGRkZWQ4OWU3NWRmZWI2ZjAyMWZiNThhNSI+cmV2ZXJzZV9pdGVyYXRvcjwvYT47CiAgIHR5cGVkZWYgc3RkOjpwYWlyJmx0O3BvaW50ZXIsIHNpemVfdHlwZSZndDsgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMjZkMjc5ZjkxZmVmNzE3ZTI1NDU5YTA4MTdmZjI0MmYiPmFycmF5X3JhbmdlPC9hPjsKICAgdHlwZWRlZiBzdGQ6OnBhaXImbHQ7Y29uc3RfcG9pbnRlciwgc2l6ZV90eXBlJmd0OyA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExODg1ZDdmNDc1YjdlN2E3NGM5NWIyNDQ4ZDI0MzAyNSI+Y29uc3RfYXJyYXlfcmFuZ2U8L2E+OwogICB0eXBlZGVmIDxpPmltcGxlbWVudGF0aW9uLWRlZmluZWQ8L2k+IDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwNTEzNTBlMDMxYzUwYzhiNGE3Y2ExZTE5MDJlOTJmMCI+Y2FwYWNpdHlfdHlwZTwvYT47CgogICBleHBsaWNpdCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYTA1ZjgyNGIzMWNkOTNkNzY5NWY0MDM5ZWRjNzU5N2YiPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2E+KGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgZXhwbGljaXQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTc0MTE1OWEwNTExYTRlMGZlZDZlYWFiNmQ2OTU5ZmE3Ij5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9hPihjYXBhY2l0eV90eXBlIGNhcGFjaXR5X2N0cmwsIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWY4YzlmYTg3MmY5YTg0ZDQ1NGQ3ZTI0NWNjMmVhZGJkIj5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9hPihjYXBhY2l0eV90eXBlIGNhcGFjaXR5X2N0cmwsIGNvbnN0X3JlZmVyZW5jZSBpdGVtLCBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7CiAgIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkMjljZTgwYjEwZDRhMzI1MGZlZGViOTQyNzIxMGQ5NiI+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvYT4oY2FwYWNpdHlfdHlwZSBjYXBhY2l0eV9jdHJsLCBzaXplX3R5cGUgbiwgY29uc3RfcmVmZXJlbmNlIGl0ZW0sIGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDsgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTsKICAgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWQ5ZjI3M2MxYTc5NGY4NDQ4NGQyMjBlOTc3YTNlMjRiIj5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGNiKTsKICAgdGVtcGxhdGUgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7CiAgICAgIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExZGQwNDE0NTQ5MmM4MmE5NTliMWRmMTE2N2I0ZTIxNyI+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvYT4oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOTZjNjNlMGVjZDU2ZjZmMWFjODdiYzc5ZDJmZDViOWYiPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2E+KGNhcGFjaXR5X3R5cGUgY2FwYWNpdHlfY3RybCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBjb25zdCBhbGxvY2F0b3JfdHlwZSZhbXA7IGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7CiAgIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE2ODM5YzNlYTY1NmZmMGY4MDBlMzgwOTY3NDhmZThhYyI+fmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2E+KCk7CgogICBhbGxvY2F0b3JfdHlwZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhMjBiN2QwZTdhNGRhMGFmMTMyODZkZjlmNTNkNjYwYyI+Z2V0X2FsbG9jYXRvcjwvYT4oKSBjb25zdDsKICAgYWxsb2NhdG9yX3R5cGUmYW1wOyA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhZjc3NThhMzZhYzJmODRhMzAyNGI1MGI0ZmM3ZTA5OCI+Z2V0X2FsbG9jYXRvcjwvYT4oKTsKICAgaXRlcmF0b3IgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luPC9hPigpOwogICBpdGVyYXRvciA8YSBocmVmPSJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQ8L2E+KCk7CiAgIGNvbnN0X2l0ZXJhdG9yIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTA2NDBkM2Q0MWMxM2I2MDg5YjZmMTY5MjI0Y2YxMDM4Ij5iZWdpbjwvYT4oKSBjb25zdDsKICAgY29uc3RfaXRlcmF0b3IgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNzg5MDgxMGQwN2JjNTk1Y2ZiODdmOWM0N2NiMDc1YWMiPmVuZDwvYT4oKSBjb25zdDsKICAgcmV2ZXJzZV9pdGVyYXRvciA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkYjNkNmIxMGI2NzYzNTQ5ZjU0ZDI2MjcyMjhmYTdhYSI+cmJlZ2luPC9hPigpOwogICByZXZlcnNlX2l0ZXJhdG9yIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWNmZjkyMzZhNTAxMDcxODhiODk0Mjg0N2E0ZGMyNjk3Ij5yZW5kPC9hPigpOwogICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTc2NWQ5MWJmNDgzNDE5MDc0MTg0MzNhMWUzYWFiMDI2Ij5yYmVnaW48L2E+KCkgY29uc3Q7CiAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMDhkYmY1MzhiMDBhMTRkYWY1NTgyZWNlODA3NDZmYzMiPnJlbmQ8L2E+KCkgY29uc3Q7CiAgIHJlZmVyZW5jZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkMjE5ZjBkMzIwM2ZiNDNiOTY0YThjZjYzZjE4NjVjZCI+b3BlcmF0b3JbXTwvYT4oc2l6ZV90eXBlIGluZGV4KTsKICAgY29uc3RfcmVmZXJlbmNlIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWViMGE3ZmU3ZjhhNTZhNGRjNGM5MzNiOTNhZGZjZWY0Ij5vcGVyYXRvcltdPC9hPihzaXplX3R5cGUgaW5kZXgpIGNvbnN0OwogICByZWZlcmVuY2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xY2Q4NDgzOGNiNGZmZmI2YzExM2ZkMDI5N2U1MDJlZGMiPmF0PC9hPihzaXplX3R5cGUgaW5kZXgpOwogICBjb25zdF9yZWZlcmVuY2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYjIzM2EyOThmNTg0NWEwZmNmMmVjYzU2ZjQxNzA4MTAiPmF0PC9hPihzaXplX3R5cGUgaW5kZXgpIGNvbnN0OwogICByZWZlcmVuY2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGQ1ZmRlYWJlYjM1MmY0N2QxZjdiYjFlYThkOTgxOWYiPmZyb250PC9hPigpOwogICByZWZlcmVuY2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZDk4NWQ5NzQwMjBmODhiYjQyNTVkOGVkYmFlMGEzMGEiPmJhY2s8L2E+KCk7CiAgIGNvbnN0X3JlZmVyZW5jZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZGY4NTk1ZDgzYmI5ZDhhN2NlNTBhYWJjNjc4ZjkwYiI+ZnJvbnQ8L2E+KCkgY29uc3Q7CiAgIGNvbnN0X3JlZmVyZW5jZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwMjcyMDE3OTc4NjhjNjI3NGZlYjY3MTJmNjcwYTEzMiI+YmFjazwvYT4oKSBjb25zdDsKICAgYXJyYXlfcmFuZ2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOTU3Y2NjZGNiMGM0ZWY3ZDgwYTM0YTk5MDA2NTgxOGQiPmFycmF5X29uZTwvYT4oKTsKICAgYXJyYXlfcmFuZ2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xZjUwODFhNTRhZmJjMmRmYzFhN2ZiMjAzMjlkZjdkNWIiPmFycmF5X3R3bzwvYT4oKTsKICAgY29uc3RfYXJyYXlfcmFuZ2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMGY0YjE1N2UyN2IxMTcwYTU3MTQxNzk4NmIyMzk5NDUiPmFycmF5X29uZTwvYT4oKSBjb25zdDsKICAgY29uc3RfYXJyYXlfcmFuZ2UgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmI4ZWIwZjI5OGFkMjAxMmM1NWM1MzAzZTFmMTc0ZDUiPmFycmF5X3R3bzwvYT4oKSBjb25zdDsKICAgcG9pbnRlciA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFlYTcyOGJmNTdmOTFhYTg5NDZlZGRmNzZjZTgxNmE0ZSI+bGluZWFyaXplPC9hPigpOwogICBib29sIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTIwZjY0NDQ4ZGMwNzIzY2M2OGMxMDk2ZjZiMDBiYzBhIj5pc19saW5lYXJpemVkPC9hPigpIGNvbnN0OwogICB2b2lkIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWM1OTFiYjllMjcxYjEwYjUyNDBhZmNmZjNiZDJjNjE5Ij5yb3RhdGU8L2E+KGNvbnN0X2l0ZXJhdG9yIG5ld19iZWdpbik7CiAgIHNpemVfdHlwZSA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZTwvYT4oKSBjb25zdDsKICAgc2l6ZV90eXBlIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU3ZTJkNTA2YmMyNzRiMmE2M2ZiZTFiOGZjYWZlYmQ3Ij5tYXhfc2l6ZTwvYT4oKSBjb25zdDsKICAgYm9vbCA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1YmUxYzJhMDA1ZWM5ODI4NTQ5ZWY2ZGQ3ZWJlZDU4MyI+ZW1wdHk8L2E+KCkgY29uc3Q7CiAgIGJvb2wgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDJmNGExM2M1MDkwNGE0YWMwYmY3NDZjODg0NTE5NTQiPmZ1bGw8L2E+KCkgY29uc3Q7CiAgIHNpemVfdHlwZSA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzBlZWM3MmE2ZThkMDg4YjU4ZTI2YWM3ZTJkZDdjOWYiPnJlc2VydmU8L2E+KCkgY29uc3Q7CiAgIGNvbnN0IGNhcGFjaXR5X3R5cGUmYW1wOyA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5PC9hPigpIGNvbnN0OwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0OWYyOGJjNWIzM2QyMDYyYjlmNmEzM2I0ODI2NGUzZiI+c2V0X2NhcGFjaXR5PC9hPihjb25zdCBjYXBhY2l0eV90eXBlJmFtcDsgY2FwYWNpdHlfY3RybCk7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYyNDRmZjU1NzZiNzlmOGQ2MGUyNzNjMDJkNzFjOWYyIj5yZXNpemU8L2E+KHNpemVfdHlwZSBuZXdfc2l6ZSwgY29uc3RfcmVmZXJlbmNlIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwZjA5NmMxMDhlYmRlNjlhZTgzYTlkZTQxYjNiZWE1NiI+cnNldF9jYXBhY2l0eTwvYT4oY29uc3QgY2FwYWNpdHlfdHlwZSZhbXA7IGNhcGFjaXR5X2N0cmwpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkNDVlMmU3MmQ5ZTNmYjQyZTA5MGViYzQ3YWM4ZDdlZSI+cnJlc2l6ZTwvYT4oc2l6ZV90eXBlIG5ld19zaXplLCBjb25zdF9yZWZlcmVuY2UgaXRlbSA9IHZhbHVlX3R5cGUoKSk7CiAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTc3ZTM1NDMyYzVlNjliN2ExNmVmN2Q5Mzc5NTBlN2E4Ij5vcGVyYXRvcj08L2E+KGNvbnN0IGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgY2IpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3Y2E0ZmRhOTUyNmQwZGFkOTk3MDY3NjNjM2IyZDlmMSI+YXNzaWduPC9hPihzaXplX3R5cGUgbiwgY29uc3RfcmVmZXJlbmNlIGl0ZW0pOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExMDgwNTVhZTNmNmIxNjM1ZTE0MjhiMDQ1NTkwMmNiZiI+YXNzaWduPC9hPihjYXBhY2l0eV90eXBlIGNhcGFjaXR5X2N0cmwsIHNpemVfdHlwZSBuLCBjb25zdF9yZWZlcmVuY2UgaXRlbSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0MTdkZTJjMjQxOWM0NGQ4M2E5MmM0NjM3NjJkZjVmYiI+YXNzaWduPC9hPihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOwogICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgdm9pZCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZTkzNDcwOTFkMmQ2NDQ4NTRhZjA4MjFkNGI0Njg2OWIiPmFzc2lnbjwvYT4oY2FwYWNpdHlfdHlwZSBjYXBhY2l0eV9jdHJsLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0ZmQzYjYxM2Y3NTRkNTI5Y2EyNTBmMjU2M2IyZjg2MyI+c3dhcDwvYT4oY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyBjYik7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNmM2ZmZWQ1NGY1ZmVjZTkzMTVmYjk2NzI2ZTVlMjA1Ij5wdXNoX2JhY2s8L2E+KGNvbnN0X3JlZmVyZW5jZSBpdGVtID0gdmFsdWVfdHlwZSgpKTsKICAgdm9pZCA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZjA0ODRmZDQ5MmIzNzdmZjgwYzBiY2I3NjE4MzE2MmMiPnB1c2hfZnJvbnQ8L2E+KGNvbnN0X3JlZmVyZW5jZSBpdGVtID0gdmFsdWVfdHlwZSgpKTsKICAgdm9pZCA8YSBocmVmPSIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5YzQyOTBjMThhYjNkZDI0NjJkYzAxZmI4MzY4ZGZmNiI+cG9wX2JhY2s8L2E+KCk7CiAgIHZvaWQgPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZDdkNDk2YzQwZmMwNTMyNThhYzdkMTljZjUyNjE3ODgiPnBvcF9mcm9udDwvYT4oKTsKICAgaXRlcmF0b3IgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQ1ODc3YTBkNDY0MDBmNDg5NGExM2QyNWQxMzhjMTMwIj5pbnNlcnQ8L2E+KGl0ZXJhdG9yIHBvcywgY29uc3RfcmVmZXJlbmNlIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOwogICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkYzIwNjBjZTExMDVkODA0MjlmZjNmMDA0Y2EwNjkxYiI+aW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBjb25zdF9yZWZlcmVuY2UgaXRlbSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZWVjOTgzYmMwMTBmMmU4NDE1NjE4NDU1ZGQ4MWRhMCI+aW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CiAgIGl0ZXJhdG9yIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFjYjM1ODY0MjllNDllZWIyZGYyZDJhMDllMTk3NzVkZSI+cmluc2VydDwvYT4oaXRlcmF0b3IgcG9zLCBjb25zdF9yZWZlcmVuY2UgaXRlbSA9IHZhbHVlX3R5cGUoKSk7CiAgIHZvaWQgPGEgaHJlZj0KIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFlZmY3ZWMwZWI2MDNkNDg5YmQxMmY4YzQ4OTI4YzlkIj5yaW5zZXJ0PC9hPihpdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBjb25zdF9yZWZlcmVuY2UgaXRlbSk7CiAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICB2b2lkIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmYWVkYTczNDJmNDcxN2Q3ZmI2YjQ1ODljYjQzYjc0ZSI+cmluc2VydDwvYT4oaXRlcmF0b3IgcG9zLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOwogICBpdGVyYXRvciA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMzZmZWFkZWYyMjViZDhhMTA5NjJhOTJjNGZmY2RmZDMiPmVyYXNlPC9hPihpdGVyYXRvciBwb3MpOwogICBpdGVyYXRvciA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWU5YTRlMGRmY2EyNzMyOWRhNzhlMDE0ZDk3MjAxY2EiPmVyYXNlPC9hPihpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCk7CiAgIGl0ZXJhdG9yIDxhIGhyZWY9CiIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE2ZTk2ODAwNDIyMjExZDAyNjIxNTI2Yzg5NGI3MWZhMSI+cmVyYXNlPC9hPihpdGVyYXRvciBwb3MpOwogICBpdGVyYXRvciA8YSBocmVmPQoiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNTRmZDRjMmE2N2M3ZDZkZTZjYmY2YzgyNTU3MjllOTgiPnJlcmFzZTwvYT4oaXRlcmF0b3IgZmlyc3QsIGl0ZXJhdG9yIGxhc3QpOwogICB2b2lkIDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTJhYTFkZDI5YmQ5NTA5YjU0ODJjYTI2NjZjNjFkZWFiIj5jbGVhcjwvYT4oKTsKfTsKCnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDsKICAgYm9vbCA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjbmFtZXNwYWNlYm9vc3RfMWQzNTg3MWU4MzgzNTliNTIxNWUxY2JiMzUzNjYzMjA3Ij5vcGVyYXRvcj09PC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyByaHMpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7CiAgIGJvb2wgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI25hbWVzcGFjZWJvb3N0XzE5NWIwODIxM2YyMDFjMjA2N2Q4YWNiMDI0NzU2MzI5ZCI+b3BlcmF0b3ImbHQ7PC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyByaHMpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7CiAgIGJvb2wgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI25hbWVzcGFjZWJvb3N0XzFmNTcxN2UyZjY1MzI1ODFhNjQ5MmZmMTgzOWIxOGY2ZCI+b3BlcmF0b3IhPTwvYT4oY29uc3QgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0IGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgcmhzKTsKdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0OwogICBib29sIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNuYW1lc3BhY2Vib29zdF8xZjU3NWQ3YTk3NDFjMjA0NDQyNGRlNTBjOTY2YzEyZjMiPm9wZXJhdG9yJmd0OzwvYT4oY29uc3QgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyBsaHMsIGNvbnN0IGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgcmhzKTsKdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIEFsbG9jJmd0OwogICBib29sIDxhIGhyZWY9CiJjaXJjdWxhcl9idWZmZXIuaHRtbCNuYW1lc3BhY2Vib29zdF8xNzlhYmNiYWNkMjRiNjdmMDgxODVkYjU0YWVjODYwMGQiPm9wZXJhdG9yJmx0Oz08L2E+KGNvbnN0IGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgbGhzLCBjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7IHJocyk7CnRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBBbGxvYyZndDsKICAgYm9vbCA8YSBocmVmPQoiY2lyY3VsYXJfYnVmZmVyLmh0bWwjbmFtZXNwYWNlYm9vc3RfMTFjMzExNTAzODAyNzJhZjY3ZGVlYmVmNTc4YzgwYjA1Ij5vcGVyYXRvciZndDs9PC9hPihjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7IGxocywgY29uc3QgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyByaHMpOwp0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQWxsb2MmZ3Q7CiAgIHZvaWQgPGEgaHJlZj0KImNpcmN1bGFyX2J1ZmZlci5odG1sI25hbWVzcGFjZWJvb3N0XzE0YWE4ZjZhMmM5NjQwZjNmMjJlMjY2ZjBmY2E4NTc3NyI+c3dhcDwvYT4oY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULCBBbGxvYyZndDsmYW1wOyBsaHMsIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwgQWxsb2MmZ3Q7JmFtcDsgcmhzKTsKCn0gLy8gbmFtZXNwYWNlIGJvb3N0CjwvcHJlPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9InJhdGlvbmFsZSIgaWQ9InJhdGlvbmFsZSI+UmF0aW9uYWxlPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICBUaGUgYXV0by1yZXNpemluZyBtb2RlIG9mIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyIGNhbiBiZSB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVuIHRoZSBjb250YWluZXIgY2FuCiAgICAgIHBvc3NpYmx5IHN0b3JlIGxhcmdlIG51bWJlciBvZiBlbGVtZW50cyBidXQgbW9zdCBvZiBpdHMgbGlmZXRpbWUgdGhlIGNvbnRhaW5lciBzdG9yZXMganVzdCBmZXcgb2YgdGhlbS4gVGhlIHVzYWdlCiAgICAgIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIHJlc3VsdCBpbiBkZWNyZWFzZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBjYW4gaW1wcm92ZQogICAgICB0aGUgQ1BVIGNhY2hlIGVmZmVjdGl2ZW5lc3MuCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9ImhlYWRlciIgaWQ9ImhlYWRlciI+SGVhZGVyIEZpbGVzPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICBUaGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgZGVmaW5lZCBpbiB0aGUgZmlsZSA8Y29kZT48YSBocmVmPQogICAgICAiLi4vLi4vLi4vYm9vc3QvY2lyY3VsYXJfYnVmZmVyLmhwcCI+Ym9vc3QvY2lyY3VsYXJfYnVmZmVyLmhwcDwvYT48L2NvZGU+LiBUaGVyZSBpcyBhbHNvIGEgZm9yd2FyZCBkZWNsYXJhdGlvbgogICAgICBmb3IgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGluIHRoZSBoZWFkZXIgZmlsZSA8Y29kZT48YSBocmVmPQogICAgICAiLi4vLi4vLi4vYm9vc3QvY2lyY3VsYXJfYnVmZmVyX2Z3ZC5ocHAiPmJvb3N0L2NpcmN1bGFyX2J1ZmZlcl9md2QuaHBwPC9hPjwvY29kZT4uCiAgICA8L3A+CiAgICA8aDI+CiAgICAgIDxhIG5hbWU9Im1vZGVsIiBpZD0ibW9kZWwiPk1vZGVsbGVkIGNvbmNlcHRzPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvUmFuZG9tQWNjZXNzQ29udGFpbmVyLmh0bWwiPlJhbmRvbSBBY2Nlc3MgQ29udGFpbmVyPC9hPiwgPGEgaHJlZj0KICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9Gcm9udEluc2VydGlvblNlcXVlbmNlLmh0bWwiPkZyb250IEluc2VydGlvbiBTZXF1ZW5jZTwvYT4gYW5kIDxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQmFja0luc2VydGlvblNlcXVlbmNlLmh0bWwiPkJhY2sgSW5zZXJ0aW9uIFNlcXVlbmNlPC9hPi4KICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0idHlwZXMiIGlkPSJ0eXBlcyI+U3BlY2lmaWMgUHVibGljIFR5cGVzPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICBGb2xsb3dpbmcgcHVibGljIHR5cGVzIGFyZSBzcGVjaWZpYyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4uIERlc2NyaXB0aW9uIG9mIHRoZQogICAgICBwdWJsaWMgdHlwZXMgY29tbW9uIHdpdGggdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcjwvY29kZT4gY2FuIGJlIGZvdW5kIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXI8L2NvZGU+J3MKICAgICAgPGEgaHJlZj0iY2lyY3VsYXJfYnVmZmVyLmh0bWwjdHlwZXMiPmRvY3VtZW50YXRpb248L2E+LgogICAgPC9wPgogICAgPGRpdiBpZD0ic3JjZG9jX3R5cGVzIj4KICAgICAgPHRhYmxlIGlkPSJ0YWJsZV9wdWJsaWNfdHlwZXMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0aD4KICAgICAgICAgICAgVHlwZQogICAgICAgICAgPC90aD4KICAgICAgICAgIDx0aD4KICAgICAgICAgICAgRGVzY3JpcHRpb24KICAgICAgICAgIDwvdGg+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwNTEzNTBlMDMxYzUwYzhiNGE3Y2ExZTE5MDJlOTJmMCI+PGNvZGU+Y2FwYWNpdHlfdHlwZTwvY29kZT48L2E+CiAgICAgICAgICA8L3RkPgogICAgICAgICAgPHRkPgogICAgICAgICAgICBDYXBhY2l0eSBjb250cm9sbGVyIG9mIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyLgogICAgICAgICAgICA8cHJlPgpjbGFzcyBjYXBhY2l0eV9jb250cm9sIHsKICAgc2l6ZV90eXBlIG1fY2FwYWNpdHk7CiAgIHNpemVfdHlwZSBtX21pbl9jYXBhY2l0eTsKcHVibGljOgogICBjYXBhY2l0eV9jb250cm9sKHNpemVfdHlwZSBjYXBhY2l0eSwgc2l6ZV90eXBlIG1pbl9jYXBhY2l0eSA9IDApIDogbV9jYXBhY2l0eShjYXBhY2l0eSksIG1fbWluX2NhcGFjaXR5KG1pbl9jYXBhY2l0eSkge307CiAgIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KICAgc2l6ZV90eXBlIG1pbl9jYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluX2NhcGFjaXR5OyB9CiAgIG9wZXJhdG9yIHNpemVfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KfTsKPC9wcmU+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHkgJmd0Oz0gbWluX2NhcGFjaXR5PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+VGhlIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT48L2NvZGU+CiAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIGNhcGFjaXR5IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBhbmQgdGhlCiAgICAgICAgICAgIDxjb2RlPm1pbl9jYXBhY2l0eSgpPC9jb2RlPiBkZXRlcm1pbmVzIHRoZSBtaW5pbWFsIGFsbG9jYXRlZCBzaXplIG9mIGl0cyBpbnRlcm5hbCBidWZmZXIuIFRoZSBjb252ZXJ0aW5nCiAgICAgICAgICAgIGNvbnN0cnVjdG9yIG9mIHRoZSA8Y29kZT5jYXBhY2l0eV9jb250cm9sPC9jb2RlPiBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiBmcm9tCiAgICAgICAgICAgIDxjb2RlPnNpemVfdHlwZTwvY29kZT4tbGlrZSB0eXBlcyB3aGljaCBlbnN1cmVzIGNvbXBhdGliaWxpdHkgb2YgY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlCiAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpdGggb3RoZXIgU1RMIGNvbnRhaW5lcnMuIE9uIHRoZSBvdGhlciBoYW5kIHRoZSBvcGVyYXRvcgogICAgICAgICAgICA8Y29kZT5zaXplX3R5cGUoKTwvY29kZT4gcHJvdmlkZXMgaW1wbGljaXQgY29udmVyc2lvbiB0byB0aGUgPGNvZGU+c2l6ZV90eXBlPC9jb2RlPiB3aGljaCBhbGxvd3MgdG8gdHJlYXQKICAgICAgICAgICAgdGhlIGNhcGFjaXR5IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCI+Y2lyY3VsYXJfYnVmZmVyPC9hPjwvY29kZT4uCiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0iY29uc3RydWN0b3JzIiBpZD0iY29uc3RydWN0b3JzIj5Db25zdHJ1Y3RvcnMgYW5kIERlc3RydWN0b3I8L2E+CiAgICA8L2gyPgogICAgPGRpdiBpZD0ic3JjZG9jX2NvbnN0cnVjdG9ycyI+CiAgICAgIDx0YWJsZSBpZD0idGFibGVfY29uc3RydWN0b3JzIiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWEwNWY4MjRiMzFjZDkzZDc2OTVmNDAzOWVkYzc1OTdmIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhMDVmODI0YjMxY2Q5M2Q3Njk1ZjQwMzllZGM3NTk3ZiI+PC9hPjxjb2RlPjxiPmV4cGxpY2l0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoY29uc3QgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNGUwN2M2ZGRmZTg5ZGViZTM4NGU1OWJlZDA2ZTdjYjciPmFsbG9jYXRvcl90eXBlPC9hPiZhbXA7CiAgICAgICAgICAgIGFsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgQ3JlYXRlIGFuIGVtcHR5IHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIgd2l0aCB6ZXJvIGNhcGFjaXR5LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+LmNhcGFjaXR5KCkKICAgICAgICAgICAgICAgID09IDAgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPi5taW5fY2FwYWNpdHkoKQogICAgICAgICAgICAgICAgPT0gMCAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PQogICAgICAgICAgICAgICAgMDwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+YWxsb2M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgYWxsb2NhdG9yLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPldhcm5pbmc6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgU2luY2UgQm9vc3QgdmVyc2lvbiAxLjM2IHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBjb25zdHJ1Y3RvciBoYXMgY2hhbmdlZC4gTm93IGl0IGNyZWF0ZXMgYSBzcGFjZQogICAgICAgICAgICAgICAgb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlciB3aXRoIHplcm8gY2FwYWNpdHkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTc0MTE1OWEwNTExYTRlMGZlZDZlYWFiNmQ2OTU5ZmE3IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3NDExNTlhMDUxMWE0ZTBmZWQ2ZWFhYjZkNjk1OWZhNyI+PC9hPjxjb2RlPjxiPmV4cGxpY2l0CiAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPgogICAgICAgICAgICBjYXBhY2l0eV9jdHJsLCBjb25zdCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsKICAgICAgICAgICAgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYW4gZW1wdHkgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0KICAgICAgICAgICAgICAgIDA8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgPGNvZGU+Y2FwYWNpdHlfY3RybC5taW5fY2FwYWNpdHkoKTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNhcGFjaXR5X2N0cmw8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgY29udHJvbGxlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gYW5kIHRoZSBtaW5pbWFsIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWY4YzlmYTg3MmY5YTg0ZDQ1NGQ3ZTI0NWNjMmVhZGJkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmOGM5ZmE4NzJmOWE4NGQ0NTRkN2UyNDVjYzJlYWRiZCI+PC9hPjxjb2RlPjxiPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoPGEgaHJlZj0iI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMDUxMzUwZTAzMWM1MGM4YjRhN2NhMWUxOTAyZTkyZjAiPmNhcGFjaXR5X3R5cGU8L2E+CiAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwsIDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+CiAgICAgICAgICAgIGl0ZW0sIGNvbnN0IDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3Ij5hbGxvY2F0b3JfdHlwZTwvYT4mYW1wOwogICAgICAgICAgICBhbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENyZWF0ZSBhIGZ1bGwgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgZmlsbGVkIHdpdGgKICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpPC9jb2RlPiBjb3BpZXMgb2YgPGNvZGU+aXRlbTwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQyZjRhMTNjNTA5MDRhNGFjMGJmNzQ2Yzg4NDUxOTU0Ij5mdWxsKCk8L2E+CiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7ICgqdGhpcylbMF0gPT0gaXRlbSAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gaXRlbSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcykKICAgICAgICAgICAgICAgIFtjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCkgLSAxXSA9PSBpdGVtPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIDxjb2RlPmNhcGFjaXR5X2N0cmwuY2FwYWNpdHkoKTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNhcGFjaXR5X2N0cmw8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgY29udHJvbGxlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gYW5kIHRoZSBtaW5pbWFsIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIGNyZWF0ZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gd2lsbCBiZSBmaWxsZWQgd2l0aC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmFsbG9jPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGFsbG9jYXRvci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIDxjb2RlPmNhcGFjaXR5X2N0cmwuY2FwYWNpdHkoKTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkMjljZTgwYjEwZDRhMzI1MGZlZGViOTQyNzIxMGQ5NiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZDI5Y2U4MGIxMGQ0YTMyNTBmZWRlYjk0MjcyMTBkOTYiPjwvYT48Y29kZT48Yj5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkKDxhIGhyZWY9IiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPgogICAgICAgICAgICBjYXBhY2l0eV9jdHJsLCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBuLAogICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtLCBjb25zdCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsKICAgICAgICAgICAgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBmaWxsZWQgd2l0aCA8Y29kZT5uPC9jb2RlPiBjb3BpZXMgb2YKICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpICZndDs9IG48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybCAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PSBuCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7ICgqdGhpcylbMF0gPT0gaXRlbSAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gaXRlbSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcylbbiAtIDFdID09CiAgICAgICAgICAgICAgICBpdGVtPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIDxjb2RlPm1heFtuLAogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybC5taW5fY2FwYWNpdHkoKV08L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYXBhY2l0eV9jdHJsPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGNhcGFjaXR5IGNvbnRyb2xsZXIgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB3aGljaCBjYW4gYmUgc3RvcmVkIGluIHRoZQogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGFuZCB0aGUgbWluaW1hbCBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGNyZWF0ZWQgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gd2lsbCBiZSBmaWxsZWQKICAgICAgICAgICAgICAgICAgICB3aXRoLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRoZSBjcmVhdGVkIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5hbGxvYzwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5uPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWQ5ZjI3M2MxYTc5NGY4NDQ4NGQyMjBlOTc3YTNlMjRiIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkOWYyNzNjMWE3OTRmODQ0ODRkMjIwZTk3N2EzZTI0YiI+PC9hPjxjb2RlPjxiPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoY29uc3QKICAgICAgICAgICAgY2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULEFsbG9jJmd0OyZhbXA7IGNiKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBUaGUgY29weSBjb25zdHJ1Y3Rvci4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIHNwZWNpZmllZCA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPip0aGlzID09IGNiPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIDxjb2RlPmNiLnNpemUoKTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNiPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgPGNvZGU+Y2I8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMWRkMDQxNDU0OTJjODJhOTU5YjFkZjExNjdiNGUyMTciIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFkZDA0MTQ1NDkyYzgyYTk1OWIxZGYxMTY3YjRlMjE3Ij48L2E+IDxjb2RlPjxiPnRlbXBsYXRlCiAgICAgICAgICAgICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0Ozxicj4KICAgICAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBjb25zdCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE0ZTA3YzZkZGZlODlkZWJlMzg0ZTU5YmVkMDZlN2NiNyI+YWxsb2NhdG9yX3R5cGU8L2E+JmFtcDsKICAgICAgICAgICAgYWxsb2MgPSBhbGxvY2F0b3JfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDcmVhdGUgYSBmdWxsIHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIgZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSByYW5nZS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPi5jYXBhY2l0eSgpCiAgICAgICAgICAgICAgICA9PSBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+Lm1pbl9jYXBhY2l0eSgpCiAgICAgICAgICAgICAgICA9PSAwICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0MmY0YTEzYzUwOTA0YTRhYzBiZjc0NmM4ODQ1MTk1NCI+ZnVsbCgpPC9hPgogICAgICAgICAgICAgICAgJmFtcDsmYW1wOyAoKnRoaXMpWzBdPT0gKmZpcnN0ICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PSAqKGZpcnN0ICsgMSkgJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOwogICAgICAgICAgICAgICAgKCp0aGlzKVtzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSAtIDFdID09ICoobGFzdCAtIDEpPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIDxjb2RlPnN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpPC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Zmlyc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgYmVnaW5uaW5nIG9mIHRoZSByYW5nZSB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5sYXN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgY29waWVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+YWxsb2M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgYWxsb2NhdG9yLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgPGNvZGU+c3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCk8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOTZjNjNlMGVjZDU2ZjZmMWFjODdiYzc5ZDJmZDViOWYiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTk2YzYzZTBlY2Q1NmY2ZjFhYzg3YmM3OWQyZmQ1YjlmIj48L2E+IDxjb2RlPjxiPnRlbXBsYXRlCiAgICAgICAgICAgICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0Ozxicj4KICAgICAgICAgICAgICAgIGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQoPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPgogICAgICAgICAgICBjYXBhY2l0eV9jdHJsLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGNvbnN0IDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTRlMDdjNmRkZmU4OWRlYmUzODRlNTliZWQwNmU3Y2I3Ij5hbGxvY2F0b3JfdHlwZTwvYT4mYW1wOwogICAgICAgICAgICBhbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENyZWF0ZSBhIHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IChhbmQgdGhlIG1pbmltYWwgZ3VhcmFudGVlZCBhbW91bnQgb2YKICAgICAgICAgICAgYWxsb2NhdGVkIG1lbW9yeSkgZmlsbGVkIHdpdGggYSBjb3B5IG9mIHRoZSByYW5nZS4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybCAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPgogICAgICAgICAgICAgICAgJmx0Oz0gc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgJmFtcDsmYW1wOyAoKnRoaXMpWzBdPT0gKGxhc3QgLSBjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCkpICZhbXA7JmFtcDsKICAgICAgICAgICAgICAgICgqdGhpcylbMV0gPT0gKihsYXN0IC0gY2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpICsgMSkgJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOwogICAgICAgICAgICAgICAgKCp0aGlzKVtjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCkgLSAxXSA9PSAqKGxhc3QgLSAxKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGNvcGllZCBmcm9tIHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlCiAgICAgICAgICAgICAgICBzcGVjaWZpZWQgPGNvZGU+Y2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpPC9jb2RlPiB0aGVuIG9ubHkgZWxlbWVudHMgZnJvbSB0aGUgcmFuZ2UgPGNvZGU+W2xhc3QgLQogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpLCBsYXN0KTwvY29kZT4gd2lsbCBiZSBjb3BpZWQuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgPGNvZGU+bWF4W2NhcGFjaXR5X2N0cmwubWluX2NhcGFjaXR5KCksCiAgICAgICAgICAgICAgICBtaW5bY2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpLCBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV1dPC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHlfY3RybDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBjYXBhY2l0eSBjb250cm9sbGVyIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggY2FuIGJlIHN0b3JlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBhbmQgdGhlIG1pbmltYWwgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgY29waWVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmFsbG9jPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGFsbG9jYXRvci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+c3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCk8L2NvZGU+OyBpbiA8Y29kZT5taW5bY2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpLAogICAgICAgICAgICAgICAgc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCldPC9jb2RlPiBpZiB0aGUgPGNvZGU+SW5wdXRJdGVyYXRvcjwvY29kZT4gaXMgYSA8YSBocmVmPQogICAgICAgICAgICAgICAgImh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9SYW5kb21BY2Nlc3NJdGVyYXRvci5odG1sIj5SYW5kb21BY2Nlc3NJdGVyYXRvcjwvYT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE2ODM5YzNlYTY1NmZmMGY4MDBlMzgwOTY3NDhmZThhYyIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNjgzOWMzZWE2NTZmZjBmODAwZTM4MDk2NzQ4ZmU4YWMiPjwvYT48Y29kZT48Yj5+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCgpOzwvYj48L2NvZGU+PGJyPgoKICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBUaGUgZGVzdHJ1Y3Rvci4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgRGVzdHJveXMgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChpbmNsdWRpbmcKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEyYWExZGQyOWJkOTUwOWI1NDgyY2EyNjY2YzYxZGVhYiI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJtZXRob2RzIiBpZD0ibWV0aG9kcyI+U3BlY2lmaWMgUHVibGljIE1lbWJlciBGdW5jdGlvbnM8L2E+CiAgICA8L2gyPgogICAgPHA+CiAgICAgIEZvbGxvd2luZyBwdWJsaWMgbWVtYmVyIGZ1bmN0aW9ucyBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaGF2ZSBkaWZmZXJlbnQgYmVoYXZpb3VyCiAgICAgIGZyb20gdGhlIGJhc2UgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPi4gRGVzY3JpcHRpb24gb2YgdGhlIHB1YmxpYyBtZW1iZXIgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgYmVoYXZpb3VyCiAgICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyPC9jb2RlPidzIDxhIGhyZWY9ImNpcmN1bGFyX2J1ZmZlci5odG1sI21ldGhvZHMiPmRvY3VtZW50YXRpb248L2E+LgogICAgPC9wPgogICAgPGRpdiBpZD0ic3JjZG9jX21ldGhvZHMiPgogICAgICA8dGFibGUgaWQ9InRhYmxlX21ldGhvZHMiIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDJmNGExM2M1MDkwNGE0YWMwYmY3NDZjODg0NTE5NTQiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQyZjRhMTNjNTA5MDRhNGFjMGJmNzQ2Yzg4NDUxOTU0Ij48L2E+PGNvZGU+PGI+Ym9vbAogICAgICAgICAgICBmdWxsKCkgY29uc3Q7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSXMgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGZ1bGw/CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPgogICAgICAgICAgICAgICAgZXF1YWxzIHRoZSBjYXBhY2l0eSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT47IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOb3RoaW5nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vLXRocm93LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgaXRlcmF0b3JzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIENvbnN0YW50IChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWJlMWMyYTAwNWVjOTgyODU0OWVmNmRkN2ViZWQ1ODMiPmVtcHR5KCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3MGVlYzcyYTZlOGQwODhiNThlMjZhYzdlMmRkN2M5ZiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzBlZWM3MmE2ZThkMDg4YjU4ZTI2YWM3ZTJkZDdjOWYiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPgogICAgICAgICAgICByZXNlcnZlKCkgY29uc3Q7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB3aGljaCBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUKICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gd2l0aG91dCBvdmVyd3JpdGluZyBhbnkgb2YgYWxyZWFkeSBzdG9yZWQgZWxlbWVudHMuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+LmNhcGFjaXR5KCkKICAgICAgICAgICAgICAgIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm90aGluZy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBOby10aHJvdy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIERvZXMgbm90IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudCAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1N2UyZDUwNmJjMjc0YjJhNjNmYmUxYjhmY2FmZWJkNyI+bWF4X3NpemUoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+PC9hPjxjb2RlPjxiPmNvbnN0CiAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwNTEzNTBlMDMxYzUwYzhiNGE3Y2ExZTE5MDJlOTJmMCI+Y2FwYWNpdHlfdHlwZTwvYT4mYW1wOwogICAgICAgICAgICBjYXBhY2l0eSgpIGNvbnN0OzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEdldCB0aGUgY2FwYWNpdHkgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgY29udHJvbGxlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlCiAgICAgICAgICAgICAgICA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBhbmQgdGhlIG1pbmltYWwgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBEb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBpdGVyYXRvcnMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzBlZWM3MmE2ZThkMDg4YjU4ZTI2YWM3ZTJkZDdjOWYiPnJlc2VydmUoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1N2UyZDUwNmJjMjc0YjJhNjNmYmUxYjhmY2FmZWJkNyI+bWF4X3NpemUoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0OWYyOGJjNWIzM2QyMDYyYjlmNmEzM2I0ODI2NGUzZiI+c2V0X2NhcGFjaXR5KGNvbnN0CiAgICAgICAgICAgICAgICBjYXBhY2l0eV90eXBlJmFtcDspPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDlmMjhiYzViMzNkMjA2MmI5ZjZhMzNiNDgyNjRlM2YiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQ5ZjI4YmM1YjMzZDIwNjJiOWY2YTMzYjQ4MjY0ZTNmIj48L2E+PGNvZGU+PGI+dm9pZAogICAgICAgICAgICBzZXRfY2FwYWNpdHkoY29uc3QgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPiZhbXA7CiAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENoYW5nZSB0aGUgY2FwYWNpdHkgKGFuZCB0aGUgbWluaW1hbCBndWFyYW50ZWVkIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5KSBvZiB0aGUKICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4KICAgICAgICAgICAgICAgICZsdDs9IGNhcGFjaXR5X2N0cmwuY2FwYWNpdHkoKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpcyBncmVhdGVyCiAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZXNpcmVkIG5ldyBjYXBhY2l0eSB0aGVuIG51bWJlciBvZiA8Y29kZT5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+IC0KICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwuY2FwYWNpdHkoKV08L2NvZGU+IDxiPmxhc3Q8L2I+IGVsZW1lbnRzIHdpbGwgYmUgcmVtb3ZlZCBhbmQgdGhlIG5ldyBzaXplIHdpbGwgYmUgZXF1YWwgdG8KICAgICAgICAgICAgICAgIDxjb2RlPmNhcGFjaXR5X2N0cmwuY2FwYWNpdHkoKTwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgbG93ZXIKICAgICAgICAgICAgICAgIHRoYW4gdGhlIG5ldyBjYXBhY2l0eSB0aGVuIHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBhY2NvbW1vZGF0ZWQgYXMKICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBidXQgaXQgd2lsbCBuZXZlciBkcm9wIGJlbG93IDxjb2RlPmNhcGFjaXR5X2N0cmwubWluX2NhcGFjaXR5KCk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYXBhY2l0eV9jdHJsPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBjYXBhY2l0eSBjb250cm9sbGVyLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgU3Ryb25nLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT5taW5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+LAogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpXTwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRvIGV4cGxpY2l0bHkgY2xlYXIgdGhlIGV4dHJhIGFsbG9jYXRlZCBtZW1vcnkgdXNlIHRoZSA8Yj5zaHJpbmstdG8tZml0PC9iPiB0ZWNobmlxdWU6PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+Ym9vc3Q6OmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7aW50Jmd0OyBjYigxMDAwKTs8YnI+CiAgICAgICAgICAgICAgICAuLi48YnI+CiAgICAgICAgICAgICAgICBib29zdDo6Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtpbnQmZ3Q7KGNiKS5zd2FwKGNiKTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNocmluay10by1maXQgdGVjaG5pcXVlIGluIFNUTCBzZWUgPGEgaHJlZj0KICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LmdvdHcuY2EvZ290dy8wNTQuaHRtIj5odHRwOi8vd3d3LmdvdHcuY2EvZ290dy8wNTQuaHRtPC9hPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwZjA5NmMxMDhlYmRlNjlhZTgzYTlkZTQxYjNiZWE1NiI+cnNldF9jYXBhY2l0eShjb25zdAogICAgICAgICAgICAgICAgY2FwYWNpdHlfdHlwZSZhbXA7KTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYyNDRmZjU1NzZiNzlmOGQ2MGUyNzNjMDJkNzFjOWYyIj5yZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYyNDRmZjU1NzZiNzlmOGQ2MGUyNzNjMDJkNzFjOWYyIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmMjQ0ZmY1NTc2Yjc5ZjhkNjBlMjczYzAyZDcxYzlmMiI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcmVzaXplKDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTliYTEyYzAxNDJhMjFhN2Q5NjA4NzdjMjJmYTNlYTAwIj5zaXplX3R5cGU8L2E+CiAgICAgICAgICAgIG5ld19zaXplLCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtID0gdmFsdWVfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PQogICAgICAgICAgICAgICAgbmV3X3NpemUgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPi5jYXBhY2l0eSgpCiAgICAgICAgICAgICAgICAmZ3Q7PSBuZXdfc2l6ZTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgbmV3IHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHNpemUsIGNvcGllcyBvZiA8Y29kZT5pdGVtPC9jb2RlPiB3aWxsIGJlIGluc2VydGVkIGF0IHRoZQogICAgICAgICAgICAgICAgPGI+YmFjazwvYj4gb2YgdGhlIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpbiBvcmRlciB0byBhY2hpZXZlIHRoZSBkZXNpcmVkCiAgICAgICAgICAgICAgICBzaXplLiBJbiB0aGUgY2FzZSB0aGUgcmVzdWx0aW5nIHNpemUgZXhjZWVkcyB0aGUgY3VycmVudCBjYXBhY2l0eSB0aGUgY2FwYWNpdHkgd2lsbCBiZSBzZXQgdG8KICAgICAgICAgICAgICAgIDxjb2RlPm5ld19zaXplPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpcyBncmVhdGVyCiAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZXNpcmVkIG5ldyBzaXplIHRoZW4gbnVtYmVyIG9mIDxjb2RlPls8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gLQogICAgICAgICAgICAgICAgbmV3X3NpemVdPC9jb2RlPiA8Yj5sYXN0PC9iPiBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWQuIChUaGUgY2FwYWNpdHkgd2lsbCByZW1haW4gdW5jaGFuZ2VkLik8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIGludGVybmFsIGJ1ZmZlciBtYXkgYmUgYWNjb21tb2RhdGVkIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bmV3X3NpemU8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IHNpemUuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGggaW4gb3JkZXIgdG8gZ2FpbgogICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gKFNlZSB0aGUgPGk+RWZmZWN0PC9pPi4pCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIG5ldyBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZDQ1ZTJlNzJkOWUzZmI0MmUwOTBlYmM0N2FjOGQ3ZWUiPnJyZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQ5ZjI4YmM1YjMzZDIwNjJiOWY2YTMzYjQ4MjY0ZTNmIj5zZXRfY2FwYWNpdHkoY29uc3QKICAgICAgICAgICAgICAgIGNhcGFjaXR5X3R5cGUmYW1wOyk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwZjA5NmMxMDhlYmRlNjlhZTgzYTlkZTQxYjNiZWE1NiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMGYwOTZjMTA4ZWJkZTY5YWU4M2E5ZGU0MWIzYmVhNTYiPjwvYT48Y29kZT48Yj52b2lkCiAgICAgICAgICAgIHJzZXRfY2FwYWNpdHkoY29uc3QgPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPiZhbXA7CiAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENoYW5nZSB0aGUgY2FwYWNpdHkgKGFuZCB0aGUgbWluaW1hbCBndWFyYW50ZWVkIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5KSBvZiB0aGUKICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4KICAgICAgICAgICAgICAgICZsdDs9IGNhcGFjaXR5X2N0cmw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgZ3JlYXRlcgogICAgICAgICAgICAgICAgdGhhbiB0aGUgZGVzaXJlZCBuZXcgY2FwYWNpdHkgdGhlbiBudW1iZXIgb2YgPGNvZGU+WzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiAtCiAgICAgICAgICAgICAgICBjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCldPC9jb2RlPiA8Yj5maXJzdDwvYj4gZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IHNpemUgd2lsbCBiZSBlcXVhbAogICAgICAgICAgICAgICAgdG8gPGNvZGU+Y2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpcyBsb3dlcgogICAgICAgICAgICAgICAgdGhhbiB0aGUgbmV3IGNhcGFjaXR5IHRoZW4gdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIGFjY29tbW9kYXRlZCBhcwogICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGJ1dCBpdCB3aWxsIG5ldmVyIGRyb3AgYmVsb3cgPGNvZGU+Y2FwYWNpdHlfY3RybC5taW5fY2FwYWNpdHkoKTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNhcGFjaXR5X2N0cmw8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGNhcGFjaXR5IGNvbnRyb2xsZXIuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBTdHJvbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoZXhjZXB0CiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4sCiAgICAgICAgICAgICAgICBjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCldPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDlmMjhiYzViMzNkMjA2MmI5ZjZhMzNiNDgyNjRlM2YiPnNldF9jYXBhY2l0eShjb25zdAogICAgICAgICAgICAgICAgY2FwYWNpdHlfdHlwZSZhbXA7KTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWQ0NWUyZTcyZDllM2ZiNDJlMDkwZWJjNDdhYzhkN2VlIj5ycmVzaXplKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkNDVlMmU3MmQ5ZTNmYjQyZTA5MGViYzQ3YWM4ZDdlZSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZDQ1ZTJlNzJkOWUzZmI0MmUwOTBlYmM0N2FjOGQ3ZWUiPjwvYT48Y29kZT48Yj52b2lkCiAgICAgICAgICAgIHJyZXNpemUoPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4KICAgICAgICAgICAgbmV3X3NpemUsIDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+CiAgICAgICAgICAgIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIENoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ID09CiAgICAgICAgICAgICAgICBuZXdfc2l6ZSAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+LmNhcGFjaXR5KCkKICAgICAgICAgICAgICAgICZndDs9IG5ld19zaXplPC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIElmIHRoZSBuZXcgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgc2l6ZSwgY29waWVzIG9mIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlCiAgICAgICAgICAgICAgICA8Yj5mcm9udDwvYj4gb2YgdGhlIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpbiBvcmRlciB0byBhY2hpZXZlIHRoZSBkZXNpcmVkCiAgICAgICAgICAgICAgICBzaXplLiBJbiB0aGUgY2FzZSB0aGUgcmVzdWx0aW5nIHNpemUgZXhjZWVkcyB0aGUgY3VycmVudCBjYXBhY2l0eSB0aGUgY2FwYWNpdHkgd2lsbCBiZSBzZXQgdG8KICAgICAgICAgICAgICAgIDxjb2RlPm5ld19zaXplPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpcyBncmVhdGVyCiAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZXNpcmVkIG5ldyBzaXplIHRoZW4gbnVtYmVyIG9mIDxjb2RlPls8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gLQogICAgICAgICAgICAgICAgbmV3X3NpemVdPC9jb2RlPiA8Yj5maXJzdDwvYj4gZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkLiAoVGhlIGNhcGFjaXR5IHdpbGwgcmVtYWluIHVuY2hhbmdlZC4pPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIGFjY29tbW9kYXRlZCBhcyBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm5ld19zaXplPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBzaXplLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIGJlIGZpbGxlZCB3aXRoIGluIG9yZGVyIHRvIGdhaW4KICAgICAgICAgICAgICAgICAgICB0aGUgcmVxdWVzdGVkIHNpemUuIChTZWUgdGhlIDxpPkVmZmVjdDwvaT4uKQogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoZXhjZXB0CiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSBuZXcgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYyNDRmZjU1NzZiNzlmOGQ2MGUyNzNjMDJkNzFjOWYyIj5yZXNpemUoc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTBmMDk2YzEwOGViZGU2OWFlODNhOWRlNDFiM2JlYTU2Ij5yc2V0X2NhcGFjaXR5KGNvbnN0CiAgICAgICAgICAgICAgICBjYXBhY2l0eV90eXBlJmFtcDspPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzdlMzU0MzJjNWU2OWI3YTE2ZWY3ZDkzNzk1MGU3YTgiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTc3ZTM1NDMyYzVlNjliN2ExNmVmN2Q5Mzc5NTBlN2E4Ij48L2E+PGNvZGU+PGI+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCZsdDtULEFsbG9jJmd0OyZhbXA7CiAgICAgICAgICAgIG9wZXJhdG9yPShjb25zdCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgY2IpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFRoZSBhc3NpZ24gb3BlcmF0b3IuCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIE1ha2VzIHRoaXMgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gdG8gYmVjb21lIGEgY29weSBvZiB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4uCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4qdGhpcyA9PSBjYjwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIGludGVybmFsIGJ1ZmZlciBpcyA8Y29kZT5jYi5zaXplKCk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB0byBiZSBjb3BpZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBTdHJvbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoaXMgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiA8Y29kZT5jYjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTdjYTRmZGE5NTI2ZDBkYWQ5OTcwNjc2M2MzYjJkOWYxIj5hc3NpZ24oc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTEwODA1NWFlM2Y2YjE2MzVlMTQyOGIwNDU1OTAyY2JmIj5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQxN2RlMmMyNDE5YzQ0ZDgzYTkyYzQ2Mzc2MmRmNWZiIj5hc3NpZ24oSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZTkzNDcwOTFkMmQ2NDQ4NTRhZjA4MjFkNGI0Njg2OWIiPmFzc2lnbihjYXBhY2l0eV90eXBlLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3Y2E0ZmRhOTUyNmQwZGFkOTk3MDY3NjNjM2IyZDlmMSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xN2NhNGZkYTk1MjZkMGRhZDk5NzA2NzYzYzNiMmQ5ZjEiPjwvYT48Y29kZT48Yj52b2lkCiAgICAgICAgICAgIGFzc2lnbig8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBuLAogICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gPGNvZGU+bjwvY29kZT4gaXRlbXMgaW50byB0aGUgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlci4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVGhlIGNvbnRlbnQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aAogICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+IGNvcGllcyBvZiB0aGUgPGNvZGU+aXRlbTwvY29kZT4uCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPi5jYXBhY2l0eSgpCiAgICAgICAgICAgICAgICA9PSBuICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4ubWluX2NhcGFjaXR5KCkKICAgICAgICAgICAgICAgID09IDAgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0gbgogICAgICAgICAgICAgICAgJmFtcDsmYW1wOyAoKnRoaXMpWzBdID09IGl0ZW0gJmFtcDsmYW1wOyAoKnRoaXMpWzFdID09IGl0ZW0gJmFtcDsmYW1wOyAuLi4gJmFtcDsmYW1wOyAoKnRoaXMpIFtuIC0gMV0KICAgICAgICAgICAgICAgID09IGl0ZW08L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgPGNvZGU+bjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIGJlIGZpbGxlZCB3aXRoLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIGJlIGZpbGxlZCB3aXRoLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoZXhjZXB0CiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSA8Y29kZT5uPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzdlMzU0MzJjNWU2OWI3YTE2ZWY3ZDkzNzk1MGU3YTgiPm9wZXJhdG9yPTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExMDgwNTVhZTNmNmIxNjM1ZTE0MjhiMDQ1NTkwMmNiZiI+YXNzaWduKGNhcGFjaXR5X3R5cGUsCiAgICAgICAgICAgICAgICBzaXplX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0MTdkZTJjMjQxOWM0NGQ4M2E5MmM0NjM3NjJkZjVmYiI+YXNzaWduKElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWU5MzQ3MDkxZDJkNjQ0ODU0YWYwODIxZDRiNDY4NjliIj5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMTA4MDU1YWUzZjZiMTYzNWUxNDI4YjA0NTU5MDJjYmYiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTEwODA1NWFlM2Y2YjE2MzVlMTQyOGIwNDU1OTAyY2JmIj48L2E+PGNvZGU+PGI+dm9pZAogICAgICAgICAgICBhc3NpZ24oPGEgaHJlZj0KICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTA1MTM1MGUwMzFjNTBjOGI0YTdjYTFlMTkwMmU5MmYwIj5jYXBhY2l0eV90eXBlPC9hPgogICAgICAgICAgICBjYXBhY2l0eV9jdHJsLCA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE5YmExMmMwMTQyYTIxYTdkOTYwODc3YzIyZmEzZWEwMCI+c2l6ZV90eXBlPC9hPiBuLAogICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gPGNvZGU+bjwvY29kZT4gaXRlbXMgaW50byB0aGUgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlciBzcGVjaWZ5aW5nIHRoZSBjYXBhY2l0eS4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIGJlIHNldCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGFuZAogICAgICAgICAgICAgIHRoZSBjb250ZW50IG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aWxsIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGgKICAgICAgICAgICAgICA8Y29kZT5uPC9jb2RlPiBjb3BpZXMgb2YgdGhlIDxjb2RlPml0ZW08L2NvZGU+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHlfY3RybC5jYXBhY2l0eSgpICZndDs9IG48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybCAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PSBuCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7ICgqdGhpcylbMF0gPT0gaXRlbSAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gaXRlbSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcykgW24gLSAxXQogICAgICAgICAgICAgICAgPT0gaXRlbTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSA8Y29kZT5tYXhbbiwgY2FwYWNpdHlfY3RybC5taW5fY2FwYWNpdHkoKV08L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5jYXBhY2l0eV9jdHJsPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBjYXBhY2l0eSBjb250cm9sbGVyLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bjwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgZmlsbGVkIHdpdGguCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIDxjb2RlPm48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3N2UzNTQzMmM1ZTY5YjdhMTZlZjdkOTM3OTUwZTdhOCI+b3BlcmF0b3I9PC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTdjYTRmZGE5NTI2ZDBkYWQ5OTcwNjc2M2MzYjJkOWYxIj5hc3NpZ24oc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTQxN2RlMmMyNDE5YzQ0ZDgzYTkyYzQ2Mzc2MmRmNWZiIj5hc3NpZ24oSW5wdXRJdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZTkzNDcwOTFkMmQ2NDQ4NTRhZjA4MjFkNGI0Njg2OWIiPmFzc2lnbihjYXBhY2l0eV90eXBlLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0MTdkZTJjMjQxOWM0NGQ4M2E5MmM0NjM3NjJkZjVmYiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDE3ZGUyYzI0MTljNDRkODNhOTJjNDYzNzYyZGY1ZmIiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUKICAgICAgICAgICAgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgdm9pZCBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gYSBjb3B5IG9mIHRoZSByYW5nZSBpbnRvIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyLgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGUgY29udGVudCBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gd2lsbCBiZSByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGNvcGllcwogICAgICAgICAgICAgIG9mIGVsZW1lbnRzIGZyb20gdGhlIHNwZWNpZmllZCByYW5nZS4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFZhbGlkIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPiBhbmQgPGNvZGU+bGFzdDwvY29kZT4gaGF2ZSB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgPGEgaHJlZj0KICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvSW5wdXRJdGVyYXRvci5odG1sIj5JbnB1dEl0ZXJhdG9yPC9hPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+LmNhcGFjaXR5KCkKICAgICAgICAgICAgICAgID09IHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpICZhbXA7JmFtcDsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4ubWluX2NhcGFjaXR5KCkKICAgICAgICAgICAgICAgID09IDAgJmFtcDsmYW1wOyA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gPT0KICAgICAgICAgICAgICAgIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpICZhbXA7JmFtcDsgKCp0aGlzKVswXT09ICpmaXJzdCAmYW1wOyZhbXA7ICgqdGhpcylbMV0gPT0gKihmaXJzdCArIDEpCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcylbc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgLSAxXSA9PSAqKGxhc3QgLSAxKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIGludGVybmFsIGJ1ZmZlciBpcyA8Y29kZT5zdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgY29waWVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgPGNvZGU+c3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCk8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3N2UzNTQzMmM1ZTY5YjdhMTZlZjdkOTM3OTUwZTdhOCI+b3BlcmF0b3I9PC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTdjYTRmZGE5NTI2ZDBkYWQ5OTcwNjc2M2MzYjJkOWYxIj5hc3NpZ24oc2l6ZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTEwODA1NWFlM2Y2YjE2MzVlMTQyOGIwNDU1OTAyY2JmIj5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWU5MzQ3MDkxZDJkNjQ0ODU0YWYwODIxZDRiNDY4NjliIj5hc3NpZ24oY2FwYWNpdHlfdHlwZSwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZTkzNDcwOTFkMmQ2NDQ4NTRhZjA4MjFkNGI0Njg2OWIiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWU5MzQ3MDkxZDJkNjQ0ODU0YWYwODIxZDRiNDY4NjliIj48L2E+IDxjb2RlPjxiPnRlbXBsYXRlCiAgICAgICAgICAgICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0Ozxicj4KICAgICAgICAgICAgICAgIHZvaWQgYXNzaWduKDxhIGhyZWY9CiAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEwNTEzNTBlMDMxYzUwYzhiNGE3Y2ExZTE5MDJlOTJmMCI+Y2FwYWNpdHlfdHlwZTwvYT4KICAgICAgICAgICAgY2FwYWNpdHlfY3RybCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBBc3NpZ24gYSBjb3B5IG9mIHRoZSByYW5nZSBpbnRvIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyIHNwZWNpZnlpbmcgdGhlIGNhcGFjaXR5LgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgc2V0IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgYW5kCiAgICAgICAgICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpbGwgYmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aCBjb3BpZXMKICAgICAgICAgICAgICBvZiBlbGVtZW50cyBmcm9tIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IGhhdmUgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPiA9PQogICAgICAgICAgICAgICAgY2FwYWNpdHlfY3RybCAmYW1wOyZhbXA7IDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPgogICAgICAgICAgICAgICAgJmx0Oz0gc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgJmFtcDsmYW1wOyAoKnRoaXMpWzBdPT0gKihsYXN0IC0gY2FwYWNpdHkpICZhbXA7JmFtcDsgKCp0aGlzKVsxXSA9PQogICAgICAgICAgICAgICAgKihsYXN0IC0gY2FwYWNpdHkgKyAxKSAmYW1wOyZhbXA7IC4uLiAmYW1wOyZhbXA7ICgqdGhpcylbY2FwYWNpdHkgLSAxXSA9PSAqKGxhc3QgLSAxKTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGNvcGllZCBmcm9tIHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gdGhlCiAgICAgICAgICAgICAgICBzcGVjaWZpZWQgPGNvZGU+Y2FwYWNpdHk8L2NvZGU+IHRoZW4gb25seSBlbGVtZW50cyBmcm9tIHRoZSByYW5nZSA8Y29kZT5bbGFzdCAtIGNhcGFjaXR5LCBsYXN0KTwvY29kZT4KICAgICAgICAgICAgICAgIHdpbGwgYmUgY29waWVkLjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIDxjb2RlPm1heFtzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSwKICAgICAgICAgICAgICAgIGNhcGFjaXR5X2N0cmwubWluX2NhcGFjaXR5KCldPC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UGFyYW1ldGVyKHMpOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y2FwYWNpdHlfY3RybDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY2FwYWNpdHkgY29udHJvbGxlci4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgY29waWVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+bGFzdDwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGNvcGllZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiA8Y29kZT5zdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvY29kZT47IGluIDxjb2RlPm1pbltjYXBhY2l0eV9jdHJsLmNhcGFjaXR5KCksCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+IGlmIHRoZSA8Y29kZT5JbnB1dEl0ZXJhdG9yPC9jb2RlPiBpcyBhIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbUFjY2Vzc0l0ZXJhdG9yPC9hPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzdlMzU0MzJjNWU2OWI3YTE2ZWY3ZDkzNzk1MGU3YTgiPm9wZXJhdG9yPTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3Y2E0ZmRhOTUyNmQwZGFkOTk3MDY3NjNjM2IyZDlmMSI+YXNzaWduKHNpemVfdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExMDgwNTVhZTNmNmIxNjM1ZTE0MjhiMDQ1NTkwMmNiZiI+YXNzaWduKGNhcGFjaXR5X3R5cGUsCiAgICAgICAgICAgICAgICBzaXplX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0MTdkZTJjMjQxOWM0NGQ4M2E5MmM0NjM3NjJkZjVmYiI+YXNzaWduKElucHV0SXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTRmZDNiNjEzZjc1NGQ1MjljYTI1MGYyNTYzYjJmODYzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0ZmQzYjYxM2Y3NTRkNTI5Y2EyNTBmMjU2M2IyZjg2MyI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgc3dhcChjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsQWxsb2MmZ3Q7JmFtcDsgY2IpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFN3YXAgdGhlIGNvbnRlbnRzIG9mIHR3byBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVycy4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT50aGlzPC9jb2RlPiBjb250YWlucyBlbGVtZW50cyBvZiA8Y29kZT5jYjwvY29kZT4gYW5kIHZpY2UgdmVyc2E7IHRoZSBjYXBhY2l0eSBhbmQgdGhlIGFtb3VudCBvZgogICAgICAgICAgICAgICAgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG9mIDxjb2RlPnRoaXM8L2NvZGU+IGVxdWFsIHRvIHRoZSBjYXBhY2l0eSBhbmQgdGhlIGFtb3VudCBvZgogICAgICAgICAgICAgICAgYWxsb2NhdGVkIG1lbW9yeSBvZiA8Y29kZT5jYjwvY29kZT4gYW5kIHZpY2UgdmVyc2EuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmNiPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdob3NlIGNvbnRlbnQgd2lsbCBiZSBzd2FwcGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIE5vdGhpbmcuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTm8tdGhyb3cuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIG9mIGJvdGggPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gY29udGFpbmVycy4gKE9uIHRoZQogICAgICAgICAgICAgICAgb3RoZXIgaGFuZCB0aGUgaXRlcmF0b3JzIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGVsZW1lbnRzIGJ1dCB3aXRoaW4gYW5vdGhlciBjb250YWluZXIuIElmIHlvdSB3YW50IHRvCiAgICAgICAgICAgICAgICByZWx5IG9uIHRoaXMgZmVhdHVyZSB5b3UgaGF2ZSB0byB0dXJuIHRoZSA8YSBocmVmPSJjaXJjdWxhcl9idWZmZXIuaHRtbCNkZWJ1ZyI+RGVidWcgU3VwcG9ydDwvYT4gb2ZmCiAgICAgICAgICAgICAgICBvdGhlcndpc2UgYW4gYXNzZXJ0aW9uIHdpbGwgcmVwb3J0IGFuIGVycm9yIGlmIHN1Y2ggaW52YWxpZGF0ZWQgaXRlcmF0b3IgaXMgdXNlZC4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc3RhbnQgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjbmFtZXNwYWNlYm9vc3RfMTRhYThmNmEyYzk2NDBmM2YyMmUyNjZmMGZjYTg1Nzc3Ij5zd2FwKGNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQmbHQ7VCwKICAgICAgICAgICAgICAgIEFsbG9jJmd0OyZhbXA7LCBjaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkJmx0O1QsIEFsbG9jJmd0OyZhbXA7KTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNmM2ZmZWQ1NGY1ZmVjZTkzMTVmYjk2NzI2ZTVlMjA1IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFjZjNmZmVkNTRmNWZlY2U5MzE1ZmI5NjcyNmU1ZTIwNSI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcHVzaF9iYWNrKDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+CiAgICAgICAgICAgIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhIG5ldyBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgaWYgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4uY2FwYWNpdHkoKQogICAgICAgICAgICAgICAgJmd0OyAwPC9jb2RlPiB0aGVuIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFkOTg1ZDk3NDAyMGY4OGJiNDI1NWQ4ZWRiYWUwYTMwYSI+YmFjaygpPC9hPiA9PQogICAgICAgICAgICAgICAgaXRlbTwvY29kZT48YnI+CiAgICAgICAgICAgICAgICBJZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgZnVsbCwgdGhlIGZpcnN0IGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkLiBJZiB0aGUKICAgICAgICAgICAgICAgIGNhcGFjaXR5IGlzIDxjb2RlPjA8L2NvZGU+LCBub3RoaW5nIHdpbGwgYmUgaW5zZXJ0ZWQuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBpbmNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB0byBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYwNDg0ZmQ0OTJiMzc3ZmY4MGMwYmNiNzYxODMxNjJjIj5wdXNoX2Zyb250KGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWM0MjkwYzE4YWIzZGQyNDYyZGMwMWZiODM2OGRmZjYiPnBvcF9iYWNrKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZDdkNDk2YzQwZmMwNTMyNThhYzdkMTljZjUyNjE3ODgiPnBvcF9mcm9udCgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZjA0ODRmZDQ5MmIzNzdmZjgwYzBiY2I3NjE4MzE2MmMiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYwNDg0ZmQ0OTJiMzc3ZmY4MGMwYmNiNzYxODMxNjJjIj48L2E+PGNvZGU+PGI+dm9pZAogICAgICAgICAgICBwdXNoX2Zyb250KDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWE4Mzk3MTkxMDkyZjViYWNlZTk5MWI2MjNjYTRiOTEwIj5jb25zdF9yZWZlcmVuY2U8L2E+CiAgICAgICAgICAgIGl0ZW0gPSB2YWx1ZV90eXBlKCkpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCBhIG5ldyBlbGVtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgaWYgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4uY2FwYWNpdHkoKQogICAgICAgICAgICAgICAgJmd0OyAwPC9jb2RlPiB0aGVuIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzEwZDVmZGVhYmViMzUyZjQ3ZDFmN2JiMWVhOGQ5ODE5ZiI+ZnJvbnQoKTwvYT4gPT0KICAgICAgICAgICAgICAgIGl0ZW08L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGlzIGZ1bGwsIHRoZSBsYXN0IGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkLiBJZiB0aGUKICAgICAgICAgICAgICAgIGNhcGFjaXR5IGlzIDxjb2RlPjA8L2NvZGU+LCBub3RoaW5nIHdpbGwgYmUgaW5zZXJ0ZWQuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBpbmNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPml0ZW08L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB0byBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNmM2ZmZWQ1NGY1ZmVjZTkzMTVmYjk2NzI2ZTVlMjA1Ij5wdXNoX2JhY2soY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5YzQyOTBjMThhYjNkZDI0NjJkYzAxZmI4MzY4ZGZmNiI+cG9wX2JhY2soKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkN2Q0OTZjNDBmYzA1MzI1OGFjN2QxOWNmNTI2MTc4OCI+cG9wX2Zyb250KCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5YzQyOTBjMThhYjNkZDI0NjJkYzAxZmI4MzY4ZGZmNiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWM0MjkwYzE4YWIzZGQyNDYyZGMwMWZiODM2OGRmZjYiPjwvYT48Y29kZT48Yj52b2lkCiAgICAgICAgICAgIHBvcF9iYWNrKCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0aGUgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlci4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT4hZW1wdHkoKTwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBsYXN0IGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIGludGVybmFsIGJ1ZmZlciBtYXkgYmUgcHJlZGljdGl2ZWx5IGRlY3JlYXNlZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWQ3ZDQ5NmM0MGZjMDUzMjU4YWM3ZDE5Y2Y1MjYxNzg4Ij5wb3BfZnJvbnQoKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFjZjNmZmVkNTRmNWZlY2U5MzE1ZmI5NjcyNmU1ZTIwNSI+cHVzaF9iYWNrKGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZjA0ODRmZDQ5MmIzNzdmZjgwYzBiY2I3NjE4MzE2MmMiPnB1c2hfZnJvbnQoY29uc3RfcmVmZXJlbmNlKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWQ3ZDQ5NmM0MGZjMDUzMjU4YWM3ZDE5Y2Y1MjYxNzg4IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkN2Q0OTZjNDBmYzA1MzI1OGFjN2QxOWNmNTI2MTc4OCI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcG9wX2Zyb250KCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgUmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gdGhlIHNwYWNlIG9wdGltaXplZCBjaXJjdWxhciBidWZmZXIuCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+IWVtcHR5KCk8L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBwcmVkaWN0aXZlbHkgZGVjcmVhc2VkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoZXhjZXB0CiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIHRoZSBzaXplIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWM0MjkwYzE4YWIzZGQyNDYyZGMwMWZiODM2OGRmZjYiPnBvcF9iYWNrKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xY2YzZmZlZDU0ZjVmZWNlOTMxNWZiOTY3MjZlNWUyMDUiPnB1c2hfYmFjayhjb25zdF9yZWZlcmVuY2UpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWYwNDg0ZmQ0OTJiMzc3ZmY4MGMwYmNiNzYxODMxNjJjIj5wdXNoX2Zyb250KGNvbnN0X3JlZmVyZW5jZSk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0NTg3N2EwZDQ2NDAwZjQ4OTRhMTNkMjVkMTM4YzEzMCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDU4NzdhMGQ0NjQwMGY0ODk0YTEzZDI1ZDEzOGMxMzAiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+CiAgICAgICAgICAgIGluc2VydCg8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywKICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4KICAgICAgICAgICAgaXRlbSA9IHZhbHVlX3R5cGUoKSk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSW5zZXJ0IGFuIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IG9yCiAgICAgICAgICAgICAgICBpdHMgZW5kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIHBvc2l0aW9uIDxjb2RlPnBvczwvY29kZT4uPGJyPgogICAgICAgICAgICAgICAgSWYgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IGlzIGZ1bGwsIHRoZSBmaXJzdCBlbGVtZW50IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIElmCiAgICAgICAgICAgICAgICB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgZnVsbCBhbmQgdGhlIDxjb2RlPnBvczwvY29kZT4gcG9pbnRzIHRvCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIHRoZW4gdGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgbm90IGJlIGluc2VydGVkLiBJZiB0aGUgY2FwYWNpdHkgaXMgPGNvZGU+MDwvY29kZT4sIG5vdGhpbmcgd2lsbCBiZQogICAgICAgICAgICAgICAgaW5zZXJ0ZWQuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBpbmNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSA8Y29kZT5pdGVtPC9jb2RlPiB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHRvIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJdGVyYXRvciB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudCBvciA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgICAgaWYgdGhlIDxjb2RlPml0ZW08L2NvZGU+IGlzIG5vdCBpbnNlcnRlZC4gKFNlZSB0aGUgPGk+RWZmZWN0PC9pPi4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWRjMjA2MGNlMTEwNWQ4MDQyOWZmM2YwMDRjYTA2OTFiIj5pbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBzaXplX3R5cGUsIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWVlYzk4M2JjMDEwZjJlODQxNTYxODQ1NWRkODFkYTAiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xY2IzNTg2NDI5ZTQ5ZWViMmRmMmQyYTA5ZTE5Nzc1ZGUiPnJpbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFlZmY3ZWMwZWI2MDNkNDg5YmQxMmY4YzQ4OTI4YzlkIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWZhZWRhNzM0MmY0NzE3ZDdmYjZiNDU4OWNiNDNiNzRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkYzIwNjBjZTExMDVkODA0MjlmZjNmMDA0Y2EwNjkxYiIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZGMyMDYwY2UxMTA1ZDgwNDI5ZmYzZjAwNGNhMDY5MWIiPjwvYT48Y29kZT48Yj52b2lkCiAgICAgICAgICAgIGluc2VydCg8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywKICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbiwKICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4KICAgICAgICAgICAgaXRlbSk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSW5zZXJ0IDxjb2RlPm48L2NvZGU+IGNvcGllcyBvZiB0aGUgPGNvZGU+aXRlbTwvY29kZT4gYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IG9yCiAgICAgICAgICAgICAgICBpdHMgZW5kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiA8Y29kZT5taW5bbiwgKHBvcyAtIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT4pICsKICAgICAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNzBlZWM3MmE2ZThkMDg4YjU4ZTI2YWM3ZTJkZDdjOWYiPnJlc2VydmUoKTwvYT5dPC9jb2RlPgogICAgICAgICAgICAgICAgZWxlbWVudHMgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbltwb3MgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+LAogICAgICAgICAgICAgICAgbWF4WzAsIG4gLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTcwZWVjNzJhNmU4ZDA4OGI1OGUyNmFjN2UyZGQ3YzlmIj5yZXNlcnZlKCk8L2E+XV08L2NvZGU+CiAgICAgICAgICAgICAgICBlbGVtZW50cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIChTZWUgPGk+RXhhbXBsZTwvaT4gZm9yIHRoZSBleHBsYW5hdGlvbi4pPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBpbmNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSA8Y29kZT5pdGVtPC9jb2RlPnMgd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPm48L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPml0ZW08L2NvZGU+cyB0aGUgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgd2hvc2UgY29waWVzIHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+bWluWzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xYWEyNjk1Yzg0YWM5ZmM5MTJlMjhkMWE1OTIwZGFkZmEiPmNhcGFjaXR5KCk8L2E+LmNhcGFjaXR5KCksCiAgICAgICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNWZhMGVkZDE1M2UyNTkxZGQ2YmYwNzBlYjY2M2VlMzIiPnNpemUoKTwvYT4gKwogICAgICAgICAgICAgICAgbl08L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhhbXBsZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBDb25zaWRlciBhIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IHdpdGggdGhlIGNhcGFjaXR5IG9mIDYgYW5kIHRoZSBzaXplIG9mIDQuIEl0cwogICAgICAgICAgICAgICAgaW50ZXJuYWwgYnVmZmVyIG1heSBsb29rIGxpa2UgdGhlIG9uZSBiZWxvdy48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDN8NHwgfCB8PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnAgLS0tXjwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBBZnRlciBpbnNlcnRpbmcgNSBlbGVtZW50cyBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cDwvY29kZT46PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+aW5zZXJ0KHAsIChzaXplX3QpNSwgMCk7PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIGFjdHVhbGx5IG9ubHkgNCBlbGVtZW50cyBnZXQgaW5zZXJ0ZWQgYW5kIGVsZW1lbnRzIDxjb2RlPjE8L2NvZGU+IGFuZCA8Y29kZT4yPC9jb2RlPiBhcmUgb3ZlcndyaXR0ZW4uCiAgICAgICAgICAgICAgICBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGUgaW5zZXJ0IG9wZXJhdGlvbiBwcmVzZXJ2ZXMgdGhlIGNhcGFjaXR5LiBBZnRlciBpbnNlcnRpb24gdGhlIGludGVybmFsCiAgICAgICAgICAgICAgICBidWZmZXIgbG9va3MgbGlrZSB0aGlzOjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPnwwfDB8MHwwfDN8NHw8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgRm9yIGNvbXBhcmlzb24gaWYgdGhlIGNhcGFjaXR5IHdvdWxkIG5vdCBiZSBwcmVzZXJ2ZWQgdGhlIGludGVybmFsIGJ1ZmZlciB3b3VsZCB0aGVuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgPGNvZGU+fDF8MnwwfDB8MHwwfDB8M3w0fDwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDU4NzdhMGQ0NjQwMGY0ODk0YTEzZDI1ZDEzOGMxMzAiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWVlYzk4M2JjMDEwZjJlODQxNTYxODQ1NWRkODFkYTAiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xY2IzNTg2NDI5ZTQ5ZWViMmRmMmQyYTA5ZTE5Nzc1ZGUiPnJpbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFlZmY3ZWMwZWI2MDNkNDg5YmQxMmY4YzQ4OTI4YzlkIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWZhZWRhNzM0MmY0NzE3ZDdmYjZiNDU4OWNiNDNiNzRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZWVjOTgzYmMwMTBmMmU4NDE1NjE4NDU1ZGQ4MWRhMCIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWVlYzk4M2JjMDEwZjJlODQxNTYxODQ1NWRkODFkYTAiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUKICAgICAgICAgICAgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgdm9pZCBpbnNlcnQoPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPiBwb3MsCiAgICAgICAgICAgIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSW5zZXJ0IHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4gaXMgYSB2YWxpZCBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gb3IKICAgICAgICAgICAgICAgIGl0cyBlbmQuPGJyPgogICAgICAgICAgICAgICAgVmFsaWQgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4gd2hlcmUgPGNvZGU+Zmlyc3Q8L2NvZGU+IGFuZCA8Y29kZT5sYXN0PC9jb2RlPiBtZWV0IHRoZQogICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIG9mIGFuIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9JbnB1dEl0ZXJhdG9yLmh0bWwiPklucHV0SXRlcmF0b3I8L2E+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgRWxlbWVudHMgZnJvbSB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0ICsgbWF4WzAsIGRpc3RhbmNlKGZpcnN0LCBsYXN0KSAtIChwb3MgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+KSAtCiAgICAgICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTcwZWVjNzJhNmU4ZDA4OGI1OGUyNmFjN2UyZGQ3YzlmIj5yZXNlcnZlKCk8L2E+XSwKICAgICAgICAgICAgICAgIGxhc3QpPC9jb2RlPiB3aWxsIGJlIGluc2VydGVkIGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgPGNvZGU+bWluW3BvcyAtIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1OGQxZWRlMmU4NWY1ZDQ2ZWRhOGRiM2YwYzRlZmVmMCI+YmVnaW4oKTwvYT4sCiAgICAgICAgICAgICAgICBtYXhbMCwgZGlzdGFuY2UoZmlyc3QsIGxhc3QpIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3MGVlYzcyYTZlOGQwODhiNThlMjZhYzdlMmRkN2M5ZiI+cmVzZXJ2ZSgpPC9hPl1dPC9jb2RlPgogICAgICAgICAgICAgICAgZWxlbWVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICAoU2VlIDxpPkV4YW1wbGU8L2k+IGZvciB0aGUgZXhwbGFuYXRpb24uKTxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBwcmVkaWN0aXZlbHkgaW5jcmVhc2VkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5sYXN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+WzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiArCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+OyBpbiA8Y29kZT5taW5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4uY2FwYWNpdHkoKSwKICAgICAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiArCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+IGlmIHRoZSA8Y29kZT5JbnB1dEl0ZXJhdG9yPC9jb2RlPiBpcyBhIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbUFjY2Vzc0l0ZXJhdG9yPC9hPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4YW1wbGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc2lkZXIgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aXRoIHRoZSBjYXBhY2l0eSBvZiA2IGFuZCB0aGUgc2l6ZSBvZiA0LiBJdHMKICAgICAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlciBtYXkgbG9vayBsaWtlIHRoZSBvbmUgYmVsb3cuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+fDF8MnwzfDR8IHwgfDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5wIC0tLV48L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgQWZ0ZXIgaW5zZXJ0aW5nIGEgcmFuZ2Ugb2YgZWxlbWVudHMgYXQgdGhlIHBvc2l0aW9uIDxjb2RlPnA8L2NvZGU+Ojxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIDxjb2RlPmludCBhcnJheVtdID0geyA1LCA2LCA3LCA4LCA5IH07PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxjb2RlPmluc2VydChwLCBhcnJheSwgYXJyYXkgKyA1KTs8L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgYWN0dWFsbHkgb25seSBlbGVtZW50cyA8Y29kZT42PC9jb2RlPiwgPGNvZGU+NzwvY29kZT4sIDxjb2RlPjg8L2NvZGU+IGFuZCA8Y29kZT45PC9jb2RlPiBmcm9tIHRoZQogICAgICAgICAgICAgICAgc3BlY2lmaWVkIHJhbmdlIGdldCBpbnNlcnRlZCBhbmQgZWxlbWVudHMgPGNvZGU+MTwvY29kZT4gYW5kIDxjb2RlPjI8L2NvZGU+IGFyZSBvdmVyd3JpdHRlbi4gVGhpcyBpcwogICAgICAgICAgICAgICAgZHVlIHRvIHRoZSBmYWN0IHRoZSBpbnNlcnQgb3BlcmF0aW9uIHByZXNlcnZlcyB0aGUgY2FwYWNpdHkuIEFmdGVyIGluc2VydGlvbiB0aGUgaW50ZXJuYWwgYnVmZmVyIGxvb2tzCiAgICAgICAgICAgICAgICBsaWtlIHRoaXM6PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+fDZ8N3w4fDl8M3w0fDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBGb3IgY29tcGFyaXNvbiBpZiB0aGUgY2FwYWNpdHkgd291bGQgbm90IGJlIHByZXNlcnZlZCB0aGUgaW50ZXJuYWwgYnVmZmVyIHdvdWxkIHRoZW4gcmVzdWx0IGluCiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDV8Nnw3fDh8OXwzfDR8PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0NTg3N2EwZDQ2NDAwZjQ4OTRhMTNkMjVkMTM4YzEzMCI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkYzIwNjBjZTExMDVkODA0MjlmZjNmMDA0Y2EwNjkxYiI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNiMzU4NjQyOWU0OWVlYjJkZjJkMmEwOWUxOTc3NWRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExZWZmN2VjMGViNjAzZDQ4OWJkMTJmOGM0ODkyOGM5ZCI+cmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmYWVkYTczNDJmNDcxN2Q3ZmI2YjQ1ODljYjQzYjc0ZSI+cmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xY2IzNTg2NDI5ZTQ5ZWViMmRmMmQyYTA5ZTE5Nzc1ZGUiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNiMzU4NjQyOWU0OWVlYjJkZjJkMmEwOWUxOTc3NWRlIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPgogICAgICAgICAgICByaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gcG9zLAogICAgICAgICAgICA8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFhODM5NzE5MTA5MmY1YmFjZWU5OTFiNjIzY2E0YjkxMCI+Y29uc3RfcmVmZXJlbmNlPC9hPgogICAgICAgICAgICBpdGVtID0gdmFsdWVfdHlwZSgpKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBJbnNlcnQgYW4gZWxlbWVudCBiZWZvcmUgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlByZWNvbmRpdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+IGlzIGEgdmFsaWQgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IG9yCiAgICAgICAgICAgICAgICBpdHMgZW5kLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgIElmIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBpcyBmdWxsLCB0aGUgbGFzdCBlbGVtZW50IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIElmCiAgICAgICAgICAgICAgICB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gaXMgZnVsbCBhbmQgdGhlIDxjb2RlPnBvczwvY29kZT4gcG9pbnRzIHRvCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICB0aGVuIHRoZSA8Y29kZT5pdGVtPC9jb2RlPiB3aWxsIG5vdCBiZSBpbnNlcnRlZC4gSWYgdGhlIGNhcGFjaXR5IGlzIDxjb2RlPjA8L2NvZGU+LCBub3RoaW5nIHdpbGwgYmUKICAgICAgICAgICAgICAgIGluc2VydGVkLjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBwcmVkaWN0aXZlbHkgaW5jcmVhc2VkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgd2hpY2ggdGhlIDxjb2RlPml0ZW08L2NvZGU+IHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5pdGVtPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBpbnNlcnRlZCBlbGVtZW50IG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgICAgaWYgdGhlIDxjb2RlPml0ZW08L2NvZGU+IGlzIG5vdCBpbnNlcnRlZC4gKFNlZSB0aGUgPGk+RWZmZWN0PC9pPi4pCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6OlQoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFlZmY3ZWMwZWI2MDNkNDg5YmQxMmY4YzQ4OTI4YzlkIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWZhZWRhNzM0MmY0NzE3ZDdmYjZiNDU4OWNiNDNiNzRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0NTg3N2EwZDQ2NDAwZjQ4OTRhMTNkMjVkMTM4YzEzMCI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkYzIwNjBjZTExMDVkODA0MjlmZjNmMDA0Y2EwNjkxYiI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTllZWM5ODNiYzAxMGYyZTg0MTU2MTg0NTVkZDgxZGEwIj5pbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTFlZmY3ZWMwZWI2MDNkNDg5YmQxMmY4YzQ4OTI4YzlkIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExZWZmN2VjMGViNjAzZDQ4OWJkMTJmOGM0ODkyOGM5ZCI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgcmluc2VydCg8YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+IHBvcywKICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xOWJhMTJjMDE0MmEyMWE3ZDk2MDg3N2MyMmZhM2VhMDAiPnNpemVfdHlwZTwvYT4gbiwKICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYTgzOTcxOTEwOTJmNWJhY2VlOTkxYjYyM2NhNGI5MTAiPmNvbnN0X3JlZmVyZW5jZTwvYT4KICAgICAgICAgICAgaXRlbSk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSW5zZXJ0IDxjb2RlPm48L2NvZGU+IGNvcGllcyBvZiB0aGUgPGNvZGU+aXRlbTwvY29kZT4gYmVmb3JlIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBvcgogICAgICAgICAgICAgICAgaXRzIGVuZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgPGNvZGU+bWluW24sICg8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPiAtCiAgICAgICAgICAgICAgICBwb3MpICsgPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3MGVlYzcyYTZlOGQwODhiNThlMjZhYzdlMmRkN2M5ZiI+cmVzZXJ2ZSgpPC9hPl08L2NvZGU+CiAgICAgICAgICAgICAgICBlbGVtZW50cyB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPiAtCiAgICAgICAgICAgICAgICBwb3MsIG1heFswLCBuIC0gPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE3MGVlYzcyYTZlOGQwODhiNThlMjZhYzdlMmRkN2M5ZiI+cmVzZXJ2ZSgpPC9hPl1dPC9jb2RlPgogICAgICAgICAgICAgICAgZWxlbWVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbiBhdCB0aGUgZW5kIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICAoU2VlIDxpPkV4YW1wbGU8L2k+IGZvciB0aGUgZXhwbGFuYXRpb24uKTxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBwcmVkaWN0aXZlbHkgaW5jcmVhc2VkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgPGNvZGU+aXRlbTwvY29kZT5zIHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5uPC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiA8Y29kZT5pdGVtPC9jb2RlPnMgdGhlIHRvIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxkbCBjb21wYWN0PgogICAgICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICAgICAgPGNvZGU+aXRlbTwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IHdob3NlIGNvcGllcyB3aWxsIGJlIGluc2VydGVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6VChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpvcGVyYXRvciA9IChjb25zdCBUJmFtcDspPC9jb2RlPiB0aHJvd3MuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4Y2VwdGlvbiBTYWZldHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQmFzaWMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkl0ZXJhdG9yIEludmFsaWRhdGlvbjo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoZXhjZXB0CiAgICAgICAgICAgICAgICBpdGVyYXRvcnMgZXF1YWwgdG8gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Q29tcGxleGl0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBMaW5lYXIgKGluIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWFhMjY5NWM4NGFjOWZjOTEyZTI4ZDFhNTkyMGRhZGZhIj5jYXBhY2l0eSgpPC9hPi5jYXBhY2l0eSgpLAogICAgICAgICAgICAgICAgPGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTVmYTBlZGQxNTNlMjU5MWRkNmJmMDcwZWI2NjNlZTMyIj5zaXplKCk8L2E+ICsKICAgICAgICAgICAgICAgIG5dPC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4YW1wbGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc2lkZXIgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aXRoIHRoZSBjYXBhY2l0eSBvZiA2IGFuZCB0aGUgc2l6ZSBvZiA0LiBJdHMKICAgICAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlciBtYXkgbG9vayBsaWtlIHRoZSBvbmUgYmVsb3cuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+fDF8MnwzfDR8IHwgfDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5wIC0tLV48L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgQWZ0ZXIgaW5zZXJ0aW5nIDUgZWxlbWVudHMgYmVmb3JlIHRoZSBwb3NpdGlvbiA8Y29kZT5wPC9jb2RlPjo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5yaW5zZXJ0KHAsIChzaXplX3QpNSwgMCk7PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIGFjdHVhbGx5IG9ubHkgNCBlbGVtZW50cyBnZXQgaW5zZXJ0ZWQgYW5kIGVsZW1lbnRzIDxjb2RlPjM8L2NvZGU+IGFuZCA8Y29kZT40PC9jb2RlPiBhcmUgb3ZlcndyaXR0ZW4uCiAgICAgICAgICAgICAgICBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGUgcmluc2VydCBvcGVyYXRpb24gcHJlc2VydmVzIHRoZSBjYXBhY2l0eS4gQWZ0ZXIgaW5zZXJ0aW9uIHRoZSBpbnRlcm5hbAogICAgICAgICAgICAgICAgYnVmZmVyIGxvb2tzIGxpa2UgdGhpczo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDB8MHwwfDB8PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIEZvciBjb21wYXJpc29uIGlmIHRoZSBjYXBhY2l0eSB3b3VsZCBub3QgYmUgcHJlc2VydmVkIHRoZSBpbnRlcm5hbCBidWZmZXIgd291bGQgdGhlbiByZXN1bHQgaW4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8MHwwfDB8MHwwfDN8NHw8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNiMzU4NjQyOWU0OWVlYjJkZjJkMmEwOWUxOTc3NWRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmYWVkYTczNDJmNDcxN2Q3ZmI2YjQ1ODljYjQzYjc0ZSI+cmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IsIElucHV0SXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNDU4NzdhMGQ0NjQwMGY0ODk0YTEzZDI1ZDEzOGMxMzAiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHZhbHVlX3R5cGUpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZGMyMDYwY2UxMTA1ZDgwNDI5ZmYzZjAwNGNhMDY5MWIiPmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZWVjOTgzYmMwMTBmMmU4NDE1NjE4NDU1ZGQ4MWRhMCI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgSW5wdXRJdGVyYXRvciwgSW5wdXRJdGVyYXRvcik8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFmYWVkYTczNDJmNDcxN2Q3ZmI2YjQ1ODljYjQzYjc0ZSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xZmFlZGE3MzQyZjQ3MTdkN2ZiNmI0NTg5Y2I0M2I3NGUiPjwvYT4gPGNvZGU+PGI+dGVtcGxhdGUKICAgICAgICAgICAgJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7PGJyPgogICAgICAgICAgICAgICAgdm9pZCByaW5zZXJ0KDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gcG9zLAogICAgICAgICAgICBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIEluc2VydCB0aGUgcmFuZ2UgPGNvZGU+W2ZpcnN0LCBsYXN0KTwvY29kZT4gYmVmb3JlIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiBvcgogICAgICAgICAgICAgICAgaXRzIGVuZC48YnI+CiAgICAgICAgICAgICAgICBWYWxpZCByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QpPC9jb2RlPiB3aGVyZSA8Y29kZT5maXJzdDwvY29kZT4gYW5kIDxjb2RlPmxhc3Q8L2NvZGU+IG1lZXQgdGhlCiAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgb2YgYW4gPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+SW5wdXRJdGVyYXRvcjwvYT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBFbGVtZW50cyBmcm9tIHRoZSByYW5nZSA8Y29kZT5bZmlyc3QsIGxhc3QgLSBtYXhbMCwgZGlzdGFuY2UoZmlyc3QsIGxhc3QpIC0gKDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+IC0KICAgICAgICAgICAgICAgIHBvcykgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTcwZWVjNzJhNmU4ZDA4OGI1OGUyNmFjN2UyZGQ3YzlmIj5yZXNlcnZlKCk8L2E+XSk8L2NvZGU+CiAgICAgICAgICAgICAgICB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIDxjb2RlPm1pbls8YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPiAtCiAgICAgICAgICAgICAgICBwb3MsIG1heFswLCBkaXN0YW5jZShmaXJzdCwgbGFzdCkgLSA8YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTcwZWVjNzJhNmU4ZDA4OGI1OGUyNmFjN2UyZGQ3YzlmIj5yZXNlcnZlKCk8L2E+XV08L2NvZGU+CiAgICAgICAgICAgICAgICBlbGVtZW50cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGF0IHRoZSBlbmQgb2YgdGhlIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyIj5jaXJjdWxhcl9idWZmZXI8L2E+PC9jb2RlPi48YnI+CiAgICAgICAgICAgICAgICAoU2VlIDxpPkV4YW1wbGU8L2k+IGZvciB0aGUgZXhwbGFuYXRpb24uKTxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIFRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIG1heSBiZSBwcmVkaWN0aXZlbHkgaW5jcmVhc2VkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBzcGVjaWZ5aW5nIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugd2lsbCBiZSBpbnNlcnRlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5sYXN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgaW5zZXJ0ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5UaHJvd3M6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQW4gYWxsb2NhdGlvbiBlcnJvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkICg8Y29kZT5zdGQ6OmJhZF9hbGxvYzwvY29kZT4gaWYgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpcwogICAgICAgICAgICAgICAgdXNlZCkuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBXaGF0ZXZlciA8Y29kZT5UOjpUKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gPGNvZGU+WzxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiArCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+OyBpbiA8Y29kZT5taW5bPGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFhYTI2OTVjODRhYzlmYzkxMmUyOGQxYTU5MjBkYWRmYSI+Y2FwYWNpdHkoKTwvYT4uY2FwYWNpdHkoKSwKICAgICAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiArCiAgICAgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KV08L2NvZGU+IGlmIHRoZSA8Y29kZT5JbnB1dEl0ZXJhdG9yPC9jb2RlPiBpcyBhIDxhIGhyZWY9CiAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbUFjY2Vzc0l0ZXJhdG9yPC9hPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkV4YW1wbGU6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgQ29uc2lkZXIgYSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiB3aXRoIHRoZSBjYXBhY2l0eSBvZiA2IGFuZCB0aGUgc2l6ZSBvZiA0LiBJdHMKICAgICAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlciBtYXkgbG9vayBsaWtlIHRoZSBvbmUgYmVsb3cuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgPGNvZGU+fDF8MnwzfDR8IHwgfDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5wIC0tLV48L2NvZGU+PGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgQWZ0ZXIgaW5zZXJ0aW5nIGEgcmFuZ2Ugb2YgZWxlbWVudHMgYmVmb3JlIHRoZSBwb3NpdGlvbiA8Y29kZT5wPC9jb2RlPjo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5pbnQgYXJyYXlbXSA9IHsgNSwgNiwgNywgOCwgOSB9OzwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8Y29kZT5pbnNlcnQocCwgYXJyYXksIGFycmF5ICsgNSk7PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIGFjdHVhbGx5IG9ubHkgZWxlbWVudHMgPGNvZGU+NTwvY29kZT4sIDxjb2RlPjY8L2NvZGU+LCA8Y29kZT43PC9jb2RlPiBhbmQgPGNvZGU+ODwvY29kZT4gZnJvbSB0aGUKICAgICAgICAgICAgICAgIHNwZWNpZmllZCByYW5nZSBnZXQgaW5zZXJ0ZWQgYW5kIGVsZW1lbnRzIDxjb2RlPjM8L2NvZGU+IGFuZCA8Y29kZT40PC9jb2RlPiBhcmUgb3ZlcndyaXR0ZW4uIFRoaXMgaXMKICAgICAgICAgICAgICAgIGR1ZSB0byB0aGUgZmFjdCB0aGUgcmluc2VydCBvcGVyYXRpb24gcHJlc2VydmVzIHRoZSBjYXBhY2l0eS4gQWZ0ZXIgaW5zZXJ0aW9uIHRoZSBpbnRlcm5hbCBidWZmZXIgbG9va3MKICAgICAgICAgICAgICAgIGxpa2UgdGhpczo8YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICA8Y29kZT58MXwyfDV8Nnw3fDh8PC9jb2RlPjxicj4KICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgIEZvciBjb21wYXJpc29uIGlmIHRoZSBjYXBhY2l0eSB3b3VsZCBub3QgYmUgcHJlc2VydmVkIHRoZSBpbnRlcm5hbCBidWZmZXIgd291bGQgdGhlbiByZXN1bHQgaW4KICAgICAgICAgICAgICAgIDxjb2RlPnwxfDJ8NXw2fDd8OHw5fDN8NHw8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMWNiMzU4NjQyOWU0OWVlYjJkZjJkMmEwOWUxOTc3NWRlIj5yaW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzExZWZmN2VjMGViNjAzZDQ4OWJkMTJmOGM0ODkyOGM5ZCI+cmluc2VydChpdGVyYXRvciwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSwgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE0NTg3N2EwZDQ2NDAwZjQ4OTRhMTNkMjVkMTM4YzEzMCI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgdmFsdWVfdHlwZSk8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzFkYzIwNjBjZTExMDVkODA0MjlmZjNmMDA0Y2EwNjkxYiI+aW5zZXJ0KGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgc2l6ZV90eXBlLCB2YWx1ZV90eXBlKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTllZWM5ODNiYzAxMGYyZTg0MTU2MTg0NTVkZDgxZGEwIj5pbnNlcnQoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBJbnB1dEl0ZXJhdG9yLCBJbnB1dEl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTM2ZmVhZGVmMjI1YmQ4YTEwOTYyYTkyYzRmZmNkZmQzIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEzNmZlYWRlZjIyNWJkOGExMDk2MmE5MmM0ZmZjZGZkMyI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4KICAgICAgICAgICAgZXJhc2UoPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPgogICAgICAgICAgICBwb3MpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFJlbW92ZSBhbiBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoYnV0CiAgICAgICAgICAgICAgICBub3QgYW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFRoZSBlbGVtZW50IGF0IHRoZSBwb3NpdGlvbiA8Y29kZT5wb3M8L2NvZGU+IGlzIHJlbW92ZWQuPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBkZWNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPnBvczwvY29kZT4KICAgICAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIGF0IHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgICA8L2RsPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5SZXR1cm5zOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IHJlbWFpbmluZyBiZXlvbmQgdGhlIHJlbW92ZWQgZWxlbWVudCBvciA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4KICAgICAgICAgICAgICAgIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZTlhNGUwZGZjYTI3MzI5ZGE3OGUwMTRkOTcyMDFjYSI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE2ZTk2ODAwNDIyMjExZDAyNjIxNTI2Yzg5NGI3MWZhMSI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE1NGZkNGMyYTY3YzdkNmRlNmNiZjZjODI1NTcyOWU5OCI+cmVyYXNlKGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgaXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMmFhMWRkMjliZDk1MDliNTQ4MmNhMjY2NmM2MWRlYWIiPmNsZWFyKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8YSBpZD0iY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZTlhNGUwZGZjYTI3MzI5ZGE3OGUwMTRkOTcyMDFjYSIgbmFtZT0KICAgICAgICAgICAgImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWU5YTRlMGRmY2EyNzMyOWRhNzhlMDE0ZDk3MjAxY2EiPjwvYT48Y29kZT48Yj48YSBocmVmPQogICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzExYjhhMzNmMmRjODUxOWI4YTdkMzQ0ZWQ0NDA4YzUzMiI+aXRlcmF0b3I8L2E+CiAgICAgICAgICAgIGVyYXNlKDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gZmlyc3QsCiAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4KICAgICAgICAgICAgbGFzdCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgRXJhc2UgdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFZhbGlkIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGVsZW1lbnRzIGZyb20gdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+IGFyZSByZW1vdmVkLiAoSWYgPGNvZGU+Zmlyc3QgPT0gbGFzdDwvY29kZT4KICAgICAgICAgICAgICAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4pPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBkZWNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSByZW1vdmVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudCByZW1haW5pbmcgYmV5b25kIHRoZSByZW1vdmVkIGVsZW1lbnRzIG9yIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgICAgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTM2ZmVhZGVmMjI1YmQ4YTEwOTYyYTkyYzRmZmNkZmQzIj5lcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNmU5NjgwMDQyMjIxMWQwMjYyMTUyNmM4OTRiNzFmYTEiPnJlcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNTRmZDRjMmE2N2M3ZDZkZTZjYmY2YzgyNTU3MjllOTgiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTJhYTFkZDI5YmQ5NTA5YjU0ODJjYTI2NjZjNjFkZWFiIj5jbGVhcigpPC9hPjwvY29kZT4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGEgaWQ9ImNsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNmU5NjgwMDQyMjIxMWQwMjYyMTUyNmM4OTRiNzFmYTEiIG5hbWU9CiAgICAgICAgICAgICJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTZlOTY4MDA0MjIyMTFkMDI2MjE1MjZjODk0YjcxZmExIj48L2E+PGNvZGU+PGI+PGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPgogICAgICAgICAgICByZXJhc2UoPGEgaHJlZj0KICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xMWI4YTMzZjJkYzg1MTliOGE3ZDM0NGVkNDQwOGM1MzIiPml0ZXJhdG9yPC9hPgogICAgICAgICAgICBwb3MpOzwvYj48L2NvZGU+PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIFJlbW92ZSBhbiBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QcmVjb25kaXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+cG9zPC9jb2RlPiBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkPC9jb2RlPiAoYnV0CiAgICAgICAgICAgICAgICBub3QgYW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMWJhYmZhMDkzZGFkNzgwMTIyM2I4MDYyNmI1OThkZWUxIj5lbmQoKTwvYT48L2NvZGU+KS48YnI+CgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBkZWNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkVmZmVjdDo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCBhdCB0aGUgcG9zaXRpb24gPGNvZGU+cG9zPC9jb2RlPiBpcyByZW1vdmVkLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5QYXJhbWV0ZXIocyk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGRsIGNvbXBhY3Q+CiAgICAgICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgICAgICA8Y29kZT5wb3M8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBBbiBpdGVyYXRvciBwb2ludGluZyBhdCB0aGUgZWxlbWVudCB0byBiZSByZW1vdmVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudCByZW1haW5pbmcgaW4gZnJvbnQgb2YgdGhlIHJlbW92ZWQgZWxlbWVudCBvciA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xNThkMWVkZTJlODVmNWQ0NmVkYThkYjNmMGM0ZWZlZjAiPmJlZ2luKCk8L2E+PC9jb2RlPgogICAgICAgICAgICAgICAgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgV2hhdGV2ZXIgPGNvZGU+VDo6b3BlcmF0b3IgPSAoY29uc3QgVCZhbXA7KTwvY29kZT4gdGhyb3dzLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Ob3RlOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljYWxseSB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEzNmZlYWRlZjIyNWJkOGExMDk2MmE5MmM0ZmZjZGZkMyI+ZXJhc2UoaXRlcmF0b3IpPC9hPjwvY29kZT4KICAgICAgICAgICAgICAgIGFuZCB0aGlzIG1ldGhvZC4gSXQgaXMgaW1wbGVtZW50ZWQgb25seSBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgYmFzZSA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sIj5jaXJjdWxhcl9idWZmZXI8L2E+PC9jb2RlPi4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+U2VlIEFsc286PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEzNmZlYWRlZjIyNWJkOGExMDk2MmE5MmM0ZmZjZGZkMyI+ZXJhc2UoaXRlcmF0b3IpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTllOWE0ZTBkZmNhMjczMjlkYTc4ZTAxNGQ5NzIwMWNhIj5lcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+LCA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTU0ZmQ0YzJhNjdjN2Q2ZGU2Y2JmNmM4MjU1NzI5ZTk4Ij5yZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEyYWExZGQyOWJkOTUwOWI1NDgyY2EyNjY2YzYxZGVhYiI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTU0ZmQ0YzJhNjdjN2Q2ZGU2Y2JmNmM4MjU1NzI5ZTk4IiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE1NGZkNGMyYTY3YzdkNmRlNmNiZjZjODI1NTcyOWU5OCI+PC9hPjxjb2RlPjxiPjxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4KICAgICAgICAgICAgcmVyYXNlKDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4gZmlyc3QsCiAgICAgICAgICAgIDxhIGhyZWY9CiAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTFiOGEzM2YyZGM4NTE5YjhhN2QzNDRlZDQ0MDhjNTMyIj5pdGVyYXRvcjwvYT4KICAgICAgICAgICAgbGFzdCk7PC9iPjwvY29kZT48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgRXJhc2UgdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UHJlY29uZGl0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFZhbGlkIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+LgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FZmZlY3Q6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgVGhlIGVsZW1lbnRzIGZyb20gdGhlIHJhbmdlIDxjb2RlPltmaXJzdCwgbGFzdCk8L2NvZGU+IGFyZSByZW1vdmVkLiAoSWYgPGNvZGU+Zmlyc3QgPT0gbGFzdDwvY29kZT4KICAgICAgICAgICAgICAgIG5vdGhpbmcgaXMgcmVtb3ZlZC4pPGJyPgogICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgVGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBpbnRlcm5hbCBidWZmZXIgbWF5IGJlIHByZWRpY3RpdmVseSBkZWNyZWFzZWQuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlBhcmFtZXRlcihzKTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmZpcnN0PC9jb2RlPgogICAgICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICAgICAgVGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8ZGwgY29tcGFjdD4KICAgICAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgICAgIDxjb2RlPmxhc3Q8L2NvZGU+CiAgICAgICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZSByZW1vdmVkLgogICAgICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+UmV0dXJuczo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBJdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudCByZW1haW5pbmcgaW4gZnJvbnQgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMgb3IgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICJjaXJjdWxhcl9idWZmZXIuaHRtbCNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfMTU4ZDFlZGUyZTg1ZjVkNDZlZGE4ZGIzZjBjNGVmZWYwIj5iZWdpbigpPC9hPjwvY29kZT4KICAgICAgICAgICAgICAgIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlRocm93czo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBBbiBhbGxvY2F0aW9uIGVycm9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQgKDxjb2RlPnN0ZDo6YmFkX2FsbG9jPC9jb2RlPiBpZiB0aGUgc3RhbmRhcmQgYWxsb2NhdG9yIGlzCiAgICAgICAgICAgICAgICB1c2VkKS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIFdoYXRldmVyIDxjb2RlPlQ6Om9wZXJhdG9yID0gKGNvbnN0IFQmYW1wOyk8L2NvZGU+IHRocm93cy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RXhjZXB0aW9uIFNhZmV0eTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpYy4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+SXRlcmF0b3IgSW52YWxpZGF0aW9uOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+IChleGNlcHQKICAgICAgICAgICAgICAgIGl0ZXJhdG9ycyBlcXVhbCB0byA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgImNpcmN1bGFyX2J1ZmZlci5odG1sI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl8xYmFiZmEwOTNkYWQ3ODAxMjIzYjgwNjI2YjU5OGRlZTEiPmVuZCgpPC9hPjwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5Db21wbGV4aXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIExpbmVhciAoaW4gdGhlIHNpemUgb2YgdGhlIDxjb2RlPmNpcmN1bGFyX2J1ZmZlcl9zcGFjZV9vcHRpbWl6ZWQ8L2NvZGU+KS4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+Tm90ZTo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICBCYXNpY2FsbHkgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWU5YTRlMGRmY2EyNzMyOWRhNzhlMDE0ZDk3MjAxY2EiPmVyYXNlKGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgaXRlcmF0b3IpPC9hPjwvY29kZT4gYW5kIHRoaXMgbWV0aG9kLiBJdCBpcyBpbXBsZW1lbnRlZCBvbmx5IGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBiYXNlCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJjaXJjdWxhcl9idWZmZXIuaHRtbCI+Y2lyY3VsYXJfYnVmZmVyPC9hPjwvY29kZT4uCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPlNlZSBBbHNvOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xMzZmZWFkZWYyMjViZDhhMTA5NjJhOTJjNGZmY2RmZDMiPmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE5ZTlhNGUwZGZjYTI3MzI5ZGE3OGUwMTRkOTcyMDFjYSI+ZXJhc2UoaXRlcmF0b3IsCiAgICAgICAgICAgICAgICBpdGVyYXRvcik8L2E+PC9jb2RlPiwgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzE2ZTk2ODAwNDIyMjExZDAyNjIxNTI2Yzg5NGI3MWZhMSI+cmVyYXNlKGl0ZXJhdG9yKTwvYT48L2NvZGU+LAogICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0KICAgICAgICAgICAgICAgICIjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEyYWExZGQyOWJkOTUwOWI1NDgyY2EyNjY2YzYxZGVhYiI+Y2xlYXIoKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxhIGlkPSJjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTJhYTFkZDI5YmQ5NTA5YjU0ODJjYTI2NjZjNjFkZWFiIiBuYW1lPQogICAgICAgICAgICAiY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyX19zcGFjZV9fb3B0aW1pemVkXzEyYWExZGQyOWJkOTUwOWI1NDgyY2EyNjY2YzYxZGVhYiI+PC9hPjxjb2RlPjxiPnZvaWQKICAgICAgICAgICAgY2xlYXIoKTs8L2I+PC9jb2RlPjxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBSZW1vdmUgYWxsIHN0b3JlZCBlbGVtZW50cyBmcm9tIHRoZSBzcGFjZSBvcHRpbWl6ZWQgY2lyY3VsYXIgYnVmZmVyLgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+RWZmZWN0OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzE1ZmEwZWRkMTUzZTI1OTFkZDZiZjA3MGViNjYzZWUzMiI+c2l6ZSgpPC9hPiA9PQogICAgICAgICAgICAgICAgMDwvY29kZT48YnI+CiAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIGludGVybmFsIGJ1ZmZlciBtYXkgYmUgcHJlZGljdGl2ZWx5IGRlY3JlYXNlZC4KICAgICAgICAgICAgICA8L2RkPgogICAgICAgICAgICA8L2RsPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPGI+VGhyb3dzOjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEFuIGFsbG9jYXRpb24gZXJyb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZCAoPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+IGlmIHRoZSBzdGFuZGFyZCBhbGxvY2F0b3IgaXMKICAgICAgICAgICAgICAgIHVzZWQpLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5FeGNlcHRpb24gU2FmZXR5OjwvYj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkZD4KICAgICAgICAgICAgICAgIEJhc2ljLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5JdGVyYXRvciBJbnZhbGlkYXRpb246PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4gKGV4Y2VwdAogICAgICAgICAgICAgICAgaXRlcmF0b3JzIGVxdWFsIHRvIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiY2lyY3VsYXJfYnVmZmVyLmh0bWwjY2xhc3Nib29zdF8xXzFjaXJjdWxhcl9fYnVmZmVyXzFiYWJmYTA5M2RhZDc4MDEyMjNiODA2MjZiNTk4ZGVlMSI+ZW5kKCk8L2E+PC9jb2RlPikuCiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxiPkNvbXBsZXhpdHk6PC9iPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGRkPgogICAgICAgICAgICAgICAgTGluZWFyIChpbiB0aGUgc2l6ZSBvZiB0aGUgPGNvZGU+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZDwvY29kZT4pLgogICAgICAgICAgICAgIDwvZGQ+CiAgICAgICAgICAgIDwvZGw+CiAgICAgICAgICAgIDxkbD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8Yj5TZWUgQWxzbzo8L2I+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZGQ+CiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTY4MzljM2VhNjU2ZmYwZjgwMGUzODA5Njc0OGZlOGFjIj5+Y2lyY3VsYXJfYnVmZmVyX3NwYWNlX29wdGltaXplZCgpPC9hPjwvY29kZT4sCiAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPQogICAgICAgICAgICAgICAgIiNjbGFzc2Jvb3N0XzFfMWNpcmN1bGFyX19idWZmZXJfX3NwYWNlX19vcHRpbWl6ZWRfMTM2ZmVhZGVmMjI1YmQ4YTEwOTYyYTkyYzRmZmNkZmQzIj5lcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xOWU5YTRlMGRmY2EyNzMyOWRhNzhlMDE0ZDk3MjAxY2EiPmVyYXNlKGl0ZXJhdG9yLAogICAgICAgICAgICAgICAgaXRlcmF0b3IpPC9hPjwvY29kZT4sIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNmU5NjgwMDQyMjIxMWQwMjYyMTUyNmM4OTRiNzFmYTEiPnJlcmFzZShpdGVyYXRvcik8L2E+PC9jb2RlPiwKICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9CiAgICAgICAgICAgICAgICAiI2NsYXNzYm9vc3RfMV8xY2lyY3VsYXJfX2J1ZmZlcl9fc3BhY2VfX29wdGltaXplZF8xNTRmZDRjMmE2N2M3ZDZkZTZjYmY2YzgyNTU3MjllOTgiPnJlcmFzZShpdGVyYXRvciwKICAgICAgICAgICAgICAgIGl0ZXJhdG9yKTwvYT48L2NvZGU+CiAgICAgICAgICAgICAgPC9kZD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPGgyPgogICAgICA8YSBuYW1lPSJzZWUiIGlkPSJzZWUiPlNlZSBhbHNvPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICA8Y29kZT48YSBocmVmPSJjaXJjdWxhcl9idWZmZXIuaHRtbCI+Ym9vc3Q6OmNpcmN1bGFyX2J1ZmZlcjwvYT4sIDxhIGhyZWY9CiAgICAgICJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvVmVjdG9yLmh0bWwiPnN0ZDo6dmVjdG9yPC9hPjwvY29kZT4KICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0iYWNrIiBpZD0iYWNrIj5BY2tub3dsZWRnZW1lbnRzPC9hPgogICAgPC9oMj4KICAgIDxwPgogICAgICBUaGUgaWRlYSBvZiB0aGUgc3BhY2Ugb3B0aW1pemVkIGNpcmN1bGFyIGJ1ZmZlciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGJ5IFBhdmVsIFZvemVuaWxlay4KICAgIDwvcD4KICAgIDxoMj4KICAgICAgPGEgbmFtZT0icmVsbm90ZXMiIGlkPSJyZWxub3RlcyI+UmVsZWFzZSBOb3RlczwvYT4KICAgIDwvaDI+CiAgICA8ZGw+CiAgICAgIDxkZD4KICAgICAgICA8aDM+CiAgICAgICAgICBCb29zdCAxLjM3CiAgICAgICAgPC9oMz4KICAgICAgPC9kZD4KICAgICAgPGRkPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT5BZGRlZCBuZXcgbWV0aG9kcyA8Y29kZT5pc19saW5lYXJpemVkKCk8L2NvZGU+IGFuZCA8Y29kZT5yb3RhdGUoY29uc3RfaXRlcmF0b3IpPC9jb2RlPi4KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kZD4KICAgICAgPGRkPgogICAgICAgIDxoMz4KICAgICAgICAgIEJvb3N0IDEuMzYKICAgICAgICA8L2gzPgogICAgICA8L2RkPgogICAgICA8ZGQ+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkNoYW5nZWQgYmVoYXZpb3VyIG9mIHRoZSA8Y29kZT5jaXJjdWxhcl9idWZmZXJfc3BhY2Vfb3B0aW1pemVkKGNvbnN0IGFsbG9jYXRvcl90eXBlJmFtcDspPC9jb2RlPgogICAgICAgICAgY29uc3RydWN0b3IuIFNpbmNlIHRoaXMgdmVyc2lvbiB0aGUgY29uc3RydWN0b3Igc2V0cyB0aGUgY2FwYWNpdHkgdG8gemVyby4KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kZD4KICAgICAgPGRkPgogICAgICAgIDxoMz4KICAgICAgICAgIEJvb3N0IDEuMzUKICAgICAgICA8L2gzPgogICAgICA8L2RkPgogICAgICA8ZGQ+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPkluaXRpYWwgcmVsZWFzZS4KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kZD4KICAgIDwvZGw+CiAgICA8aHIgc2l6ZT0iMSI+CiAgICA8cD4KICAgICAgPHNtYWxsPkNvcHlyaWdodCCpIDIwMDMtMjAwOCBKYW4gR2FzcGFyPC9zbWFsbD4KICAgIDwvcD4KICAgIDxwPgogICAgICA8c21hbGw+VXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24gaXMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuPGJyPgogICAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIDxjb2RlPkxJQ0VOU0VfMV8wLnR4dDwvY29kZT4gb3IgY29weSBhdCA8YSBocmVmPQogICAgICAiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+CiAgICA8L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==