PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPjx0aXRsZT5SZXRyaWV2aW5nIEVsZW1lbnQgQ29udGVudDwvdGl0bGU+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS41MC4wIj48bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJMaWJ4bWwgVHV0b3JpYWwiPjxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9ImFyMDFzMDMuaHRtbCIgdGl0bGU9IlBhcnNpbmcgdGhlIGZpbGUiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXIwMXMwNS5odG1sIiB0aXRsZT0iV3JpdGluZyBlbGVtZW50IGNvbnRlbnQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjMiIGFsaWduPSJjZW50ZXIiPlJldHJpZXZpbmcgRWxlbWVudCBDb250ZW50PC90aD48L3RyPjx0cj48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImxlZnQiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iYXIwMXMwMy5odG1sIj5QcmV2PC9hPqA8L3RkPjx0aCB3aWR0aD0iNjAlIiBhbGlnbj0iY2VudGVyIj6gPC90aD48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJhcjAxczA1Lmh0bWwiPk5leHQ8L2E+PC90ZD48L3RyPjwvdGFibGU+PGhyPjwvZGl2PjxkaXYgY2xhc3M9InNlY3QxIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJ4bWx0dXRvcmlhbGdldHRleHQiPjwvYT5SZXRyaWV2aW5nIEVsZW1lbnQgQ29udGVudDwvaDI+PC9kaXY+PC9kaXY+PHA+UmV0cmlldmluZyB0aGUgY29udGVudCBvZiBhbiBlbGVtZW50IGludm9sdmVzIHRyYXZlcnNpbmcgdGhlIGRvY3VtZW50CiAgICB0cmVlIHVudGlsIHlvdSBmaW5kIHdoYXQgeW91IGFyZSBsb29raW5nIGZvci4gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgbG9va2luZwogICAgZm9yIGFuIGVsZW1lbnQgY2FsbGVkICZxdW90O2tleXdvcmQmcXVvdDsgY29udGFpbmVkIHdpdGhpbiBlbGVtZW50IGNhbGxlZCAmcXVvdDtzdG9yeSZxdW90Oy4gVGhlCiAgICBwcm9jZXNzIHRvIGZpbmQgdGhlIG5vZGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gaW52b2x2ZXMgdGVkaW91c2x5IHdhbGtpbmcgdGhlCiAgICB0cmVlLiBXZSBhc3N1bWUgeW91IGFscmVhZHkgaGF2ZSBhbiB4bWxEb2NQdHIgY2FsbGVkIDx0dD5kb2M8L3R0PgogICAgYW5kIGFuIHhtbE5vZFB0ciBjYWxsZWQgPHR0PmN1cjwvdHQ+LjwvcD48cD4KICAgICAgPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgoJPGEgbmFtZT0iZ2V0Y2hpbGRub2RlIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8xLnBuZyIgYWx0PSIxIiBib3JkZXI9IjAiPmN1ciA9IGN1ci0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlOwoJPGEgbmFtZT0iaHVudHN0b3J5aW5mbyI+PC9hPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMi5wbmciIGFsdD0iMiIgYm9yZGVyPSIwIj53aGlsZSAoY3VyICE9IE5VTEwpIHsKCQlpZiAoKCF4bWxTdHJjbXAoY3VyLSZndDtuYW1lLCAoY29uc3QgeG1sQ2hhciAqKSZxdW90O3N0b3J5aW5mbyZxdW90OykpKXsKCQkJcGFyc2VTdG9yeSAoZG9jLCBjdXIpOwoJCX0KCQkgCgljdXIgPSBjdXItJmd0O25leHQ7Cgl9CiAgICAgIDwvcHJlPgoKICAgICAgPC9wPjxkaXYgY2xhc3M9ImNhbGxvdXRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJDYWxsb3V0IGxpc3QiPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNnZXRjaGlsZG5vZGUiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+R2V0IHRoZSBmaXJzdCBjaGlsZCBub2RlIG9mIDx0dD5jdXI8L3R0Pi4gQXQgdGhpcwoJICAgIHBvaW50LCA8dHQ+Y3VyPC90dD4gcG9pbnRzIGF0IHRoZSBkb2N1bWVudCByb290LCB3aGljaCBpcwoJICAgIHRoZSBlbGVtZW50ICZxdW90O3N0b3J5JnF1b3Q7LjwvcD48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iI2h1bnRzdG9yeWluZm8iPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMi5wbmciIGFsdD0iMiIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+VGhpcyBsb29wIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGNoaWxkcmVuIG9mCgkgICZxdW90O3N0b3J5JnF1b3Q7LCBsb29raW5nIGZvciBvbmUgY2FsbGVkICZxdW90O3N0b3J5aW5mbyZxdW90Oy4gVGhhdAoJICBpcyB0aGUgZWxlbWVudCB0aGF0IHdpbGwgY29udGFpbiB0aGUgJnF1b3Q7a2V5d29yZHMmcXVvdDsgd2UgYXJlCgkgICAgbG9va2luZyBmb3IuIEl0IHVzZXMgdGhlIGxpYnhtbCBzdHJpbmcKCSAgY29tcGFyaXNvbgoJICAgIGZ1bmN0aW9uLCA8dHQ+PGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXBhcnNlci5odG1sI1hNTFNUUkNNUCIgdGFyZ2V0PSJfdG9wIj54bWxTdHJjbXA8L2E+PC90dD4uIElmIHRoZXJlIGlzIGEgbWF0Y2gsIGl0IGNhbGxzIHRoZSBmdW5jdGlvbiA8dHQ+cGFyc2VTdG9yeTwvdHQ+LjwvcD48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48cD4KICAgIDwvcD48cD4KICAgICAgPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgp2b2lkCnBhcnNlU3RvcnkgKHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgY3VyKSB7CgoJeG1sQ2hhciAqa2V5OwoJPGEgbmFtZT0iYW5vdGhlcmdldGNoaWxkIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8xLnBuZyIgYWx0PSIxIiBib3JkZXI9IjAiPiBjdXIgPSBjdXItJmd0O3htbENoaWxkcmVuTm9kZTsKCTxhIG5hbWU9ImZpbmRrZXl3b3JkIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8yLnBuZyIgYWx0PSIyIiBib3JkZXI9IjAiPiB3aGlsZSAoY3VyICE9IE5VTEwpIHsKCSAgICBpZiAoKCF4bWxTdHJjbXAoY3VyLSZndDtuYW1lLCAoY29uc3QgeG1sQ2hhciAqKSZxdW90O2tleXdvcmQmcXVvdDspKSkgewoJPGEgbmFtZT0iZm91bmRrZXl3b3JkIj48L2E+PGltZyBzcmM9ImltYWdlcy9jYWxsb3V0cy8zLnBuZyIgYWx0PSIzIiBib3JkZXI9IjAiPgkgICAga2V5ID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZG9jLCBjdXItJmd0O3htbENoaWxkcmVuTm9kZSwgMSk7CgkJICAgIHByaW50ZigmcXVvdDtrZXl3b3JkOiAlc1xuJnF1b3Q7LCBrZXkpOwoJCSAgICB4bWxGcmVlKGtleSk7CiAJICAgIH0KCWN1ciA9IGN1ci0mZ3Q7bmV4dDsKCX0KICAgIHJldHVybjsKfQogICAgICA8L3ByZT4KICAgICAgPC9wPjxkaXYgY2xhc3M9ImNhbGxvdXRsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJDYWxsb3V0IGxpc3QiPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNhbm90aGVyZ2V0Y2hpbGQiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMS5wbmciIGFsdD0iMSIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+QWdhaW4gd2UgZ2V0IHRoZSBmaXJzdCBjaGlsZCBub2RlLjwvcD48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNSUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iI2ZpbmRrZXl3b3JkIj48aW1nIHNyYz0iaW1hZ2VzL2NhbGxvdXRzLzIucG5nIiBhbHQ9IjIiIGJvcmRlcj0iMCI+PC9hPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxwPkxpa2UgdGhlIGxvb3AgYWJvdmUsIHdlIHRoZW4gaXRlcmF0ZSB0aHJvdWdoIHRoZSBub2RlcywgbG9va2luZwoJICBmb3Igb25lIHRoYXQgbWF0Y2hlcyB0aGUgZWxlbWVudCB3ZSdyZSBpbnRlcmVzdGVkIGluLCBpbiB0aGlzIGNhc2UKCSAgJnF1b3Q7a2V5d29yZCZxdW90Oy48L3A+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjUlIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IiNmb3VuZGtleXdvcmQiPjxpbWcgc3JjPSJpbWFnZXMvY2FsbG91dHMvMy5wbmciIGFsdD0iMyIgYm9yZGVyPSIwIj48L2E+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI+PHA+V2hlbiB3ZSBmaW5kIHRoZSAmcXVvdDtrZXl3b3JkJnF1b3Q7IGVsZW1lbnQsIHdlIG5lZWQgdG8gcHJpbnQKCSAgICBpdHMgY29udGVudHMuIFJlbWVtYmVyIHRoYXQgaW4gWE1MLCB0aGUgdGV4dAoJICAgIGNvbnRhaW5lZCB3aXRoaW4gYW4gZWxlbWVudCBpcyBhIGNoaWxkIG5vZGUgb2YgdGhhdCBlbGVtZW50LCBzbyB3ZQoJICAgIHR1cm4gdG8gPHR0PmN1ci0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlPC90dD4uIFRvIHJldHJpZXZlIGl0LCB3ZQoJICAgIHVzZSB0aGUgZnVuY3Rpb24gPHR0PjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC10cmVlLmh0bWwjWE1MTk9ERUxJU1RHRVRTVFJJTkciIHRhcmdldD0iX3RvcCI+eG1sTm9kZUxpc3RHZXRTdHJpbmc8L2E+PC90dD4sIHdoaWNoIGFsc28gdGFrZXMgdGhlIDx0dD5kb2M8L3R0PiBwb2ludGVyIGFzIGFuIGFyZ3VtZW50LiBJbiB0aGlzIGNhc2UsIHdlIGp1c3QgcHJpbnQgaXQgb3V0LjwvcD48ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PHRhYmxlIGJvcmRlcj0iMCI+PHRyPjx0ZCByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjI1Ij48aW1nIHNyYz0iaW1hZ2VzL25vdGUucG5nIj48L3RkPjx0aD5Ob3RlPC90aD48L3RyPjx0cj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48cD5CZWNhdXNlIDx0dD54bWxOb2RlTGlzdEdldFN0cmluZzwvdHQ+IGFsbG9jYXRlcwoJICAgICAgbWVtb3J5IGZvciB0aGUgc3RyaW5nIGl0IHJldHVybnMsIHlvdSBtdXN0IHVzZQoJICAgICAgPHR0PnhtbEZyZWU8L3R0PiB0byBmcmVlIGl0LjwvcD48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48cD4KICAgIDwvcD48L2Rpdj48ZGl2IGNsYXNzPSJuYXZmb290ZXIiPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gZm9vdGVyIj48dHI+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImFyMDFzMDMuaHRtbCI+UHJldjwvYT6gPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sIj5VcDwvYT48L3RkPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0icmlnaHQiPqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFyMDFzMDUuaHRtbCI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPlBhcnNpbmcgdGhlIGZpbGWgPC90ZD48dGQgd2lkdGg9IjIwJSIgYWxpZ249ImNlbnRlciI+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPqBXcml0aW5nIGVsZW1lbnQgY29udGVudDwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+Cg==