PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT5QYXJzaW5nIHRoZSBmaWxlPC90aXRsZT48bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjQ4Ij48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFyMDFzMDIuaHRtbCIgdGl0bGU9IkRhdGEgVHlwZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXIwMXMwNC5odG1sIiB0aXRsZT0iUmV0cmlldmluZyBFbGVtZW50IENvbnRlbnQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPlBhcnNpbmcgdGhlIGZpbGU8L3RoPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczAyLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRoIHdpZHRoPSI2MCUiIGFsaWduPSJjZW50ZXIiPqA8L3RoPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFyMDFzMDQuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDEiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InhtbHR1dG9yaWFscGFyc2luZyI+PC9hPlBhcnNpbmcgdGhlIGZpbGU8L2gyPjwvZGl2PjwvZGl2PjxwPlBhcnNpbmcgdGhlIGZpbGUgcmVxdWlyZXMgb25seSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhbmQgYSBzaW5nbGUKICAgICAgZnVuY3Rpb24gY2FsbCwgcGx1cyBlcnJvciBjaGVja2luZy4gRnVsbCBjb2RlOiA8YSBocmVmPSJhcGIuaHRtbCIgdGl0bGU9IkIuIENvZGUgZm9yIEtleXdvcmQgRXhhbXBsZSI+QXBwZW5kaXggQjwvYT48L3A+PHA+CiAgICA8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiAgICAgICAgPGEgbmFtZT0iZGVjbGFyZWRvYyI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj4geG1sRG9jUHRyIGRvYzsKCTxhIG5hbWU9ImRlY2xhcmVub2RlIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8yLnBuZyIgYWx0PSIyIiBib3JkZXI9IjAiPiB4bWxOb2RlUHRyIGN1cjsKCgk8YSBuYW1lPSJwYXJzZWZpbGUiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzMucG5nIiBhbHQ9IjMiIGJvcmRlcj0iMCI+IGRvYyA9IHhtbFBhcnNlRmlsZShkb2NuYW1lKTsKCQoJPGEgbmFtZT0iY2hlY2twYXJzZWVycm9yIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy80LnBuZyIgYWx0PSI0IiBib3JkZXI9IjAiPiBpZiAoZG9jID09IE5VTEwgKSB7CgkJZnByaW50ZihzdGRlcnIsJnF1b3Q7RG9jdW1lbnQgbm90IHBhcnNlZCBzdWNjZXNzZnVsbHkuIFxuJnF1b3Q7KTsKICAgICAgICAgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKCQlyZXR1cm47Cgl9CgoJPGEgbmFtZT0iZ2V0cm9vdGVsZW1lbnQiPjwvYT48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzUucG5nIiBhbHQ9IjUiIGJvcmRlcj0iMCI+IGN1ciA9IHhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk7CgkKCTxhIG5hbWU9ImNoZWNrZW1wdHllcnJvciI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvNi5wbmciIGFsdD0iNiIgYm9yZGVyPSIwIj4gaWYgKGN1ciA9PSBOVUxMKSB7CgkJZnByaW50ZihzdGRlcnIsJnF1b3Q7ZW1wdHkgZG9jdW1lbnRcbiZxdW90Oyk7CgkJeG1sRnJlZURvYyhkb2MpOwoJCXJldHVybjsKCX0KCQoJPGEgbmFtZT0iY2hlY2tyb290dHlwZSI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvNy5wbmciIGFsdD0iNyIgYm9yZGVyPSIwIj4gaWYgKHhtbFN0cmNtcChjdXItJmd0O25hbWUsIChjb25zdCB4bWxDaGFyICopICZxdW90O3N0b3J5JnF1b3Q7KSkgewoJCWZwcmludGYoc3RkZXJyLCZxdW90O2RvY3VtZW50IG9mIHRoZSB3cm9uZyB0eXBlLCByb290IG5vZGUgIT0gc3RvcnkmcXVvdDspOwoJCXhtbEZyZWVEb2MoZG9jKTsKCQlyZXR1cm47Cgl9CgogICAgPC9wcmU+CiAgICAgIDxkaXYgY2xhc3M9ImNhbGxvdXRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJDYWxsb3V0IGxpc3QiPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNkZWNsYXJlZG9jIj48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzEucG5nIiBhbHQ9IjEiIGJvcmRlcj0iMCI+PC9hPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxwPkRlY2xhcmUgdGhlIHBvaW50ZXIgdGhhdCB3aWxsIHBvaW50IHRvIHlvdXIgcGFyc2VkIGRvY3VtZW50LjwvcD48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iI2RlY2xhcmVub2RlIj48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzIucG5nIiBhbHQ9IjIiIGJvcmRlcj0iMCI+PC9hPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxwPkRlY2xhcmUgYSBub2RlIHBvaW50ZXIgKHlvdSdsbCBuZWVkIHRoaXMgaW4gb3JkZXIgdG8KCSAgaW50ZXJhY3Qgd2l0aCBpbmRpdmlkdWFsIG5vZGVzKS48L3A+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNjaGVja3BhcnNlZXJyb3IiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvNC5wbmciIGFsdD0iNCIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+Q2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRvY3VtZW50IHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLjwvcD48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iI2dldHJvb3RlbGVtZW50Ij48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzUucG5nIiBhbHQ9IjUiIGJvcmRlcj0iMCI+PC9hPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxwPlJldHJpZXZlIHRoZSBkb2N1bWVudCdzIHJvb3QgZWxlbWVudC48L3A+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNjaGVja2VtcHR5ZXJyb3IiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvNi5wbmciIGFsdD0iNiIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+Q2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkb2N1bWVudCBhY3R1YWxseSBjb250YWlucyBzb21ldGhpbmcuPC9wPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSI1JSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSIjY2hlY2tyb290dHlwZSI+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy83LnBuZyIgYWx0PSI3IiBib3JkZXI9IjAiPjwvYT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij48cD5JbiBvdXIgY2FzZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIHRoZSByaWdodAoJICB0eXBlLiAmcXVvdDtzdG9yeSZxdW90OyBpcyB0aGUgcm9vdCB0eXBlIG9mIG15IGRvY3VtZW50cy48L3A+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CiAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGZvb3RlciI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJhcjAxczAyLmh0bWwiPlByZXY8L2E+oDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCI+VXA8L2E+PC90ZD48dGQgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcjAxczA0Lmh0bWwiPk5leHQ8L2E+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjQwJSIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj5EYXRhIFR5cGVzoDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj6gUmV0cmlldmluZyBFbGVtZW50IENvbnRlbnQ8L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPgo=