PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlBvaW50IFVzYWdlPC90aXRsZT4KPC9oZWFkPgoKPGJvZHk+Cgo8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyI+Lyo8YnI+CkNvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uPGJyPgo8YnI+ClVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsPGJyPgpWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdDxicj4KaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS48YnI+CiovPGJyPgojaW5jbHVkZSAmbHQ7Ym9vc3QvcG9seWdvbi9wb2x5Z29uLmhwcCZndDs8YnI+CiNpbmNsdWRlICZsdDtjYXNzZXJ0Jmd0Ozxicj4KbmFtZXNwYWNlIGd0bCA9IGJvb3N0Ojpwb2x5Z29uOzxicj4KdXNpbmcgbmFtZXNwYWNlIGJvb3N0Ojpwb2x5Z29uOjpvcGVyYXRvcnM7PGJyPjxicj4KaW50IG1haW4oKSB7PGJyPgombmJzcDsgLy9jb25zdHJ1Y3RpbmcgYSBndGwgcG9pbnQ8YnI+CiZuYnNwOyB0eXBlZGVmIGd0bDo6cG9pbnRfZGF0YSZsdDtpbnQmZ3Q7IFBvaW50Ozxicj4KJm5ic3A7IGludCB4ID0gMTA7PGJyPgombmJzcDsgaW50IHkgPSAyMDs8YnI+CiZuYnNwOyBQb2ludCBwdCh4LCB5KTs8YnI+CiZuYnNwOyBhc3NlcnQoZ3RsOjp4KHB0KSA9PSAxMCk7PGJyPgombmJzcDsgYXNzZXJ0KGd0bDo6eShwdCkgPT0gMjApOzxicj4KJm5ic3A7IDxicj4KJm5ic3A7IC8vYSBxdWljayBwcmltZXIgaW4gaXNvdHJvcGljIHBvaW50IGFjY2Vzczxicj4KJm5ic3A7IHR5cGVkZWYgZ3RsOjpvcmllbnRhdGlvbl8yZCBPOzxicj4KJm5ic3A7IHVzaW5nIGd0bDo6SE9SSVpPTlRBTDs8YnI+CiZuYnNwOyB1c2luZyBndGw6OlZFUlRJQ0FMOzxicj4KJm5ic3A7IE8gbyA9IEhPUklaT05UQUw7PGJyPgombmJzcDsgYXNzZXJ0KGd0bDo6eChwdCkgPT0gZ3RsOjpnZXQocHQsIG8pKTs8YnI+CiZuYnNwOyA8YnI+CiZuYnNwOyBvID0gby5nZXRfcGVycGVuZGljdWxhcigpOzxicj4KJm5ic3A7IGFzc2VydChvID09IFZFUlRJQ0FMKTs8YnI+CiZuYnNwOyBhc3NlcnQoZ3RsOjp5KHB0KSA9PSBndGw6OmdldChwdCwgbykpOzxicj4KPGJyPgombmJzcDsgZ3RsOjpzZXQocHQsIG8sIDMwKTs8YnI+CiZuYnNwOyBhc3NlcnQoZ3RsOjp5KHB0KSA9PSAzMCk7PGJyPgo8YnI+CiZuYnNwOyAvL3VzaW5nIHNvbWUgb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zPGJyPgombmJzcDsgUG9pbnQgcHQyKDEwLCAzMCk7PGJyPgombmJzcDsgYXNzZXJ0KGd0bDo6ZXF1aXZhbGVuY2UocHQsIHB0MikpOzxicj4KPGJyPgombmJzcDsgZ3RsOjp0cmFuc2Zvcm1hdGlvbiZsdDtpbnQmZ3Q7IHRyKGd0bDo6YXhpc190cmFuc2Zvcm1hdGlvbjo6U1dBUF9YWSk7PGJyPgombmJzcDsgZ3RsOjp0cmFuc2Zvcm0ocHQsIHRyKTs8YnI+CiZuYnNwOyBhc3NlcnQoZ3RsOjplcXVpdmFsZW5jZShwdCwgUG9pbnQoMzAsIDEwKSkpOzxicj4KPGJyPgombmJzcDsgZ3RsOjp0cmFuc2Zvcm1hdGlvbiZsdDtpbnQmZ3Q7IHRyMiA9IHRyLmludmVyc2UoKTs8YnI+CiZuYnNwOyBhc3NlcnQodHIgPT0gdHIyKTsgLy9TV0FQX1hZIGlzIGl0cyBvd24gaW52ZXJzZSB0cmFuc2Zvcm08YnI+Cjxicj4KJm5ic3A7IGd0bDo6dHJhbnNmb3JtKHB0LCB0cjIpOzxicj4KJm5ic3A7IGFzc2VydChndGw6OmVxdWl2YWxlbmNlKHB0LCBwdDIpKTsgLy90aGUgdHdvIHBvaW50cyBhcmUgZXF1YWwgYWdhaW48YnI+Cjxicj4KJm5ic3A7IGd0bDo6bW92ZShwdCwgbywgMTApOyAvL21vdmUgcHQgMTAgdW5pdHMgaW4geTxicj4KJm5ic3A7IGFzc2VydChndGw6OmV1Y2xpZGVhbl9kaXN0YW5jZShwdCwgcHQyKSA9PSAxMC4wZik7PGJyPgo8YnI+CiZuYnNwOyBndGw6Om1vdmUocHQsIG8uZ2V0X3BlcnBlbmRpY3VsYXIoKSwgMTApOyAvL21vdmUgcHQgMTAgdW5pdHMgaW4geDxicj4KJm5ic3A7IGFzc2VydChndGw6Om1hbmhhdHRhbl9kaXN0YW5jZShwdCwgcHQyKSA9PSAyMCk7PGJyPgo8YnI+CiZuYnNwOyByZXR1cm4gMDs8YnI+Cn08YnI+CiZuYnNwOzwvZm9udD48L3A+CgoKPHRhYmxlIGNsYXNzPSJkb2NpbmZvIiBydWxlcz0ibm9uZSIgZnJhbWU9InZvaWQiIGlkPSJ0YWJsZTEiPgoJPGNvbGdyb3VwPgoJCTxjb2wgY2xhc3M9ImRvY2luZm8tbmFtZSI+PGNvbCBjbGFzcz0iZG9jaW5mby1jb250ZW50Ij4KCTwvY29sZ3JvdXA+Cgk8dGJvZHkgdkFsaWduPSJ0b3AiPgoJCTx0cj4KCQkJPHRoIGNsYXNzPSJkb2NpbmZvLW5hbWUiPkNvcHlyaWdodDo8L3RoPgoJCQk8dGQ+Q29weXJpZ2h0IKkgSW50ZWwgQ29ycG9yYXRpb24gMjAwOC0yMDEwLjwvdGQ+CgkJPC90cj4KCQk8dHIgY2xhc3M9ImZpZWxkIj4KCQkJPHRoIGNsYXNzPSJkb2NpbmZvLW5hbWUiPkxpY2Vuc2U6PC90aD4KCQkJPHRkIGNsYXNzPSJmaWVsZC1ib2R5Ij5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgCgkJCVZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIDx0dCBjbGFzcz0ibGl0ZXJhbCI+CgkJCTxzcGFuIGNsYXNzPSJwcmUiPkxJQ0VOU0VfMV8wLnR4dDwvc3Bhbj48L3R0PiBvciBjb3B5IGF0CgkJCTxhIGNsYXNzPSJyZWZlcmVuY2UiIHRhcmdldD0iX3RvcCIgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij4KCQkJaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3RkPgoJCTwvdHI+CjwvdGFibGU+Cgo8L2JvZHk+Cgo8L2h0bWw+Cg==