PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPjMuoFVzaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBWYWxncmluZCBjb3JlOiBBZHZhbmNlZCBUb3BpY3M8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ2Z19iYXNpYy5jc3MiPgo8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgo8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJWYWxncmluZCBEb2N1bWVudGF0aW9uIj4KPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibWFudWFsLmh0bWwiIHRpdGxlPSJWYWxncmluZCBVc2VyIE1hbnVhbCI+CjxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWFudWFsLWNvcmUuaHRtbCIgdGl0bGU9IjIuoFVzaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBWYWxncmluZCBjb3JlIj4KPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJtYy1tYW51YWwuaHRtbCIgdGl0bGU9IjQuoE1lbWNoZWNrOiBhIG1lbW9yeSBlcnJvciBkZXRlY3RvciI+CjwvaGVhZD4KPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgo8ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2IiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjMiIGNlbGxwYWRkaW5nPSIzIiBib3JkZXI9IjAiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIj48dHI+Cjx0ZCB3aWR0aD0iMjJweCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0ibWFudWFsLWNvcmUuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9wcmV2LnBuZyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjIxIiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Cjx0ZCB3aWR0aD0iMjVweCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibWFudWFsLmh0bWwiPjxpbWcgc3JjPSJpbWFnZXMvdXAucG5nIiB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Cjx0ZCB3aWR0aD0iMzFweCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImltYWdlcy9ob21lLnBuZyIgd2lkdGg9IjI3IiBoZWlnaHQ9IjIwIiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgo8dGggYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPlZhbGdyaW5kIFVzZXIgTWFudWFsPC90aD4KPHRkIHdpZHRoPSIyMnB4IiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSI+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJtYy1tYW51YWwuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9uZXh0LnBuZyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjIxIiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+CjwvdHI+PC90YWJsZT48L2Rpdj4KPGRpdiBjbGFzcz0iY2hhcHRlciI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYiPjwvYT4zLqBVc2luZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgVmFsZ3JpbmQgY29yZTogQWR2YW5jZWQgVG9waWNzPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0idG9jIj4KPHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPgo8ZGwgY2xhc3M9InRvYyI+CjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9Im1hbnVhbC1jb3JlLWFkdi5odG1sI21hbnVhbC1jb3JlLWFkdi5jbGllbnRyZXEiPjMuMS4gVGhlIENsaWVudCBSZXF1ZXN0IG1lY2hhbmlzbTwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MSI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlciI+My4yLiBEZWJ1Z2dpbmcgeW91ciBwcm9ncmFtIHVzaW5nIFZhbGdyaW5kIGdkYnNlcnZlciBhbmQgR0RCPC9hPjwvc3Bhbj48L2R0Pgo8ZGQ+PGRsPgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyLXNpbXBsZSI+My4yLjEuIFF1aWNrIFN0YXJ0OiBkZWJ1Z2dpbmcgaW4gMyBzdGVwczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1jb25jZXB0Ij4zLjIuMi4gVmFsZ3JpbmQgZ2Ric2VydmVyIG92ZXJhbGwgb3JnYW5pc2F0aW9uPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyLWdkYiI+My4yLjMuIENvbm5lY3RpbmcgR0RCIHRvIGEgVmFsZ3JpbmQgZ2Ric2VydmVyPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyLWdkYi1hbmRyb2lkIj4zLjIuNC4gQ29ubmVjdGluZyB0byBhbiBBbmRyb2lkIGdkYnNlcnZlcjwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1jb21tYW5kaGFuZGxpbmciPjMuMi41LiBNb25pdG9yIGNvbW1hbmQgaGFuZGxpbmcgYnkgdGhlIFZhbGdyaW5kIGdkYnNlcnZlcjwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci10aHJlYWRzIj4zLjIuNi4gVmFsZ3JpbmQgZ2Ric2VydmVyIHRocmVhZCBpbmZvcm1hdGlvbjwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1zaGFkb3dyZWdpc3RlcnMiPjMuMi43LiBFeGFtaW5pbmcgYW5kIG1vZGlmeWluZyBWYWxncmluZCBzaGFkb3cgcmVnaXN0ZXJzPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyLWxpbWl0YXRpb25zIj4zLjIuOC4gTGltaXRhdGlvbnMgb2YgdGhlIFZhbGdyaW5kIGdkYnNlcnZlcjwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LnZnZGIiPjMuMi45LiB2Z2RiIGNvbW1hbmQgbGluZSBvcHRpb25zPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYudmFsZ3JpbmQtbW9uaXRvci1jb21tYW5kcyI+My4yLjEwLiBWYWxncmluZCBtb25pdG9yIGNvbW1hbmRzPC9hPjwvc3Bhbj48L2R0Pgo8L2RsPjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdDEiPjxhIGhyZWY9Im1hbnVhbC1jb3JlLWFkdi5odG1sI21hbnVhbC1jb3JlLWFkdi53cmFwcGluZyI+My4zLiBGdW5jdGlvbiB3cmFwcGluZzwvYT48L3NwYW4+PC9kdD4KPGRkPjxkbD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLmV4YW1wbGUiPjMuMy4xLiBBIFNpbXBsZSBFeGFtcGxlPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYud3JhcHBpbmcuc3BlY3MiPjMuMy4yLiBXcmFwcGluZyBTcGVjaWZpY2F0aW9uczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLnNlbWFudGljcyI+My4zLjMuIFdyYXBwaW5nIFNlbWFudGljczwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLmRlYnVnZ2luZyI+My4zLjQuIERlYnVnZ2luZzwvYT48L3NwYW4+PC9kdD4KPGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLmxpbWl0YXRpb25zLWNmIj4zLjMuNS4gTGltaXRhdGlvbnMgLSBjb250cm9sIGZsb3c8L2E+PC9zcGFuPjwvZHQ+CjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxhIGhyZWY9Im1hbnVhbC1jb3JlLWFkdi5odG1sI21hbnVhbC1jb3JlLWFkdi53cmFwcGluZy5saW1pdGF0aW9ucy1zaWdzIj4zLjMuNi4gTGltaXRhdGlvbnMgLSBvcmlnaW5hbCBmdW5jdGlvbiBzaWduYXR1cmVzPC9hPjwvc3Bhbj48L2R0Pgo8ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYud3JhcHBpbmcuZXhhbXBsZXMiPjMuMy43LiBFeGFtcGxlczwvYT48L3NwYW4+PC9kdD4KPC9kbD48L2RkPgo8L2RsPgo8L2Rpdj4KPHA+VGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBhZHZhbmNlZCBhc3BlY3RzIG9mIHRoZSBWYWxncmluZCBjb3JlCnNlcnZpY2VzLCB3aGljaCBhcmUgbW9zdGx5IG9mIGludGVyZXN0IHRvIHBvd2VyIHVzZXJzIHdobyB3aXNoIHRvCmN1c3RvbWlzZSBhbmQgbW9kaWZ5IFZhbGdyaW5kJ3MgZGVmYXVsdCBiZWhhdmlvdXJzIGluIGNlcnRhaW4gdXNlZnVsCndheXMuICBUaGUgc3ViamVjdHMgY292ZXJlZCBhcmU6PC9wPgo8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5UaGUgIkNsaWVudCBSZXF1ZXN0IiBtZWNoYW5pc208L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+RGVidWdnaW5nIHlvdXIgcHJvZ3JhbSB1c2luZyBWYWxncmluZCdzIGdkYnNlcnZlcgogICAgICBhbmQgR0RCPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkZ1bmN0aW9uIFdyYXBwaW5nPC9wPjwvbGk+CjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3QxIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmNsaWVudHJlcSI+PC9hPjMuMS6gVGhlIENsaWVudCBSZXF1ZXN0IG1lY2hhbmlzbTwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+CjxwPlZhbGdyaW5kIGhhcyBhIHRyYXBkb29yIG1lY2hhbmlzbSB2aWEgd2hpY2ggdGhlIGNsaWVudApwcm9ncmFtIGNhbiBwYXNzIGFsbCBtYW5uZXIgb2YgcmVxdWVzdHMgYW5kIHF1ZXJpZXMgdG8gVmFsZ3JpbmQKYW5kIHRoZSBjdXJyZW50IHRvb2wuICBJbnRlcm5hbGx5LCB0aGlzIGlzIHVzZWQgZXh0ZW5zaXZlbHkgCnRvIG1ha2UgdmFyaW91cyB0aGluZ3Mgd29yaywgYWx0aG91Z2ggdGhhdCdzIG5vdCB2aXNpYmxlIGZyb20gdGhlCm91dHNpZGUuPC9wPgo8cD5Gb3IgeW91ciBjb252ZW5pZW5jZSwgYSBzdWJzZXQgb2YgdGhlc2Ugc28tY2FsbGVkIGNsaWVudApyZXF1ZXN0cyBpcyBwcm92aWRlZCB0byBhbGxvdyB5b3UgdG8gdGVsbCBWYWxncmluZCBmYWN0cyBhYm91dAp0aGUgYmVoYXZpb3VyIG9mIHlvdXIgcHJvZ3JhbSwgYW5kIGFsc28gdG8gbWFrZSBxdWVyaWVzLgpJbiBwYXJ0aWN1bGFyLCB5b3VyIHByb2dyYW0gY2FuIHRlbGwgVmFsZ3JpbmQgYWJvdXQgdGhpbmdzIHRoYXQgaXQKb3RoZXJ3aXNlIHdvdWxkIG5vdCBrbm93LCBsZWFkaW5nIHRvIGJldHRlciByZXN1bHRzLgo8L3A+CjxwPkNsaWVudHMgbmVlZCB0byBpbmNsdWRlIGEgaGVhZGVyIGZpbGUgdG8gbWFrZSB0aGlzIHdvcmsuCldoaWNoIGhlYWRlciBmaWxlIGRlcGVuZHMgb24gd2hpY2ggY2xpZW50IHJlcXVlc3RzIHlvdSB1c2UuICBTb21lCmNsaWVudCByZXF1ZXN0cyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZSwgYW5kIGFyZSBkZWZpbmVkIGluIHRoZQpoZWFkZXIgZmlsZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZhbGdyaW5kL3ZhbGdyaW5kLmg8L2NvZGU+LiAgVG9vbC1zcGVjaWZpYwpoZWFkZXIgZmlsZXMgYXJlIG5hbWVkIGFmdGVyIHRoZSB0b29sLCBlLmcuCjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dmFsZ3JpbmQvbWVtY2hlY2suaDwvY29kZT4uICBFYWNoIHRvb2wtc3BlY2lmaWMgaGVhZGVyIGZpbGUKaW5jbHVkZXMgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52YWxncmluZC92YWxncmluZC5oPC9jb2RlPiBzbyB5b3UgZG9uJ3QgbmVlZCB0bwppbmNsdWRlIGl0IGluIHlvdXIgY2xpZW50IGlmIHlvdSBpbmNsdWRlIGEgdG9vbC1zcGVjaWZpYyBoZWFkZXIuICBBbGwgaGVhZGVyCmZpbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmluY2x1ZGUvdmFsZ3JpbmQ8L2NvZGU+IGRpcmVjdG9yeSBvZgp3aGVyZXZlciBWYWxncmluZCB3YXMgaW5zdGFsbGVkLjwvcD4KPHA+VGhlIG1hY3JvcyBpbiB0aGVzZSBoZWFkZXIgZmlsZXMgaGF2ZSB0aGUgbWFnaWNhbCBwcm9wZXJ0eQp0aGF0IHRoZXkgZ2VuZXJhdGUgY29kZSBpbi1saW5lIHdoaWNoIFZhbGdyaW5kIGNhbiBzcG90LgpIb3dldmVyLCB0aGUgY29kZSBkb2VzIG5vdGhpbmcgd2hlbiBub3QgcnVuIG9uIFZhbGdyaW5kLCBzbyB5b3UKYXJlIG5vdCBmb3JjZWQgdG8gcnVuIHlvdXIgcHJvZ3JhbSB1bmRlciBWYWxncmluZCBqdXN0IGJlY2F1c2UgeW91CnVzZSB0aGUgbWFjcm9zIGluIHRoaXMgZmlsZS4gIEFsc28sIHlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGxpbmsgeW91cgpwcm9ncmFtIHdpdGggYW55IGV4dHJhIHN1cHBvcnRpbmcgbGlicmFyaWVzLjwvcD4KPHA+VGhlIGNvZGUgYWRkZWQgdG8geW91ciBiaW5hcnkgaGFzIG5lZ2xpZ2libGUgcGVyZm9ybWFuY2UgaW1wYWN0OgpvbiB4ODYsIGFtZDY0LCBwcGMzMiwgcHBjNjQgYW5kIEFSTSwgdGhlIG92ZXJoZWFkIGlzIDYgc2ltcGxlIGludGVnZXIKaW5zdHJ1Y3Rpb25zIGFuZCBpcyBwcm9iYWJseSB1bmRldGVjdGFibGUgZXhjZXB0IGluIHRpZ2h0IGxvb3BzLgpIb3dldmVyLCBpZiB5b3UgcmVhbGx5IHdpc2ggdG8gY29tcGlsZSBvdXQgdGhlIGNsaWVudCByZXF1ZXN0cywgeW91CmNhbiBjb21waWxlIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LUROVkFMR1JJTkQ8L2NvZGU+IChhbmFsb2dvdXMgdG8KPGNvZGUgY2xhc3M9Im9wdGlvbiI+LUROREVCVUc8L2NvZGU+J3MgZWZmZWN0IG9uCjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YXNzZXJ0PC9jb2RlPikuCjwvcD4KPHA+WW91IGFyZSBlbmNvdXJhZ2VkIHRvIGNvcHkgdGhlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dmFsZ3JpbmQvKi5oPC9jb2RlPiBoZWFkZXJzCmludG8geW91ciBwcm9qZWN0J3MgaW5jbHVkZSBkaXJlY3RvcnksIHNvIHlvdXIgcHJvZ3JhbSBkb2Vzbid0IGhhdmUgYQpjb21waWxlLXRpbWUgZGVwZW5kZW5jeSBvbiBWYWxncmluZCBiZWluZyBpbnN0YWxsZWQuICBUaGUgVmFsZ3JpbmQgaGVhZGVycywKdW5saWtlIG1vc3Qgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvZGUsIGFyZSB1bmRlciBhIEJTRC1zdHlsZSBsaWNlbnNlIHNvIHlvdSBtYXkKaW5jbHVkZSB0aGVtIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgbGljZW5zZSBpbmNvbXBhdGliaWxpdHkuPC9wPgo8cD5IZXJlIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIG1hY3JvcyBhdmFpbGFibGUgaW4KPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52YWxncmluZC5oPC9jb2RlPiwgd2hpY2ggd29yayB3aXRoIG1vcmUgdGhhbiBvbmUKdG9vbCAoc2VlIHRoZSB0b29sLXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIGV4cGxhbmF0aW9ucyBvZiB0aGUKdG9vbC1zcGVjaWZpYyBtYWNyb3MpLjwvcD4KPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5SVU5OSU5HX09OX1ZBTEdSSU5EPC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj46PC9zcGFuPjwvZHQ+CjxkZD48cD5SZXR1cm5zIDEgaWYgcnVubmluZyBvbiBWYWxncmluZCwgMCBpZiBydW5uaW5nIG9uIHRoZQogICAgcmVhbCBDUFUuICBJZiB5b3UgYXJlIHJ1bm5pbmcgVmFsZ3JpbmQgb24gaXRzZWxmLCByZXR1cm5zIHRoZQogICAgbnVtYmVyIG9mIGxheWVycyBvZiBWYWxncmluZCBlbXVsYXRpb24geW91J3JlIHJ1bm5pbmcgb24uCiAgICA8L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX0RJU0NBUkRfVFJBTlNMQVRJT05TPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD4KPHA+RGlzY2FyZHMgdHJhbnNsYXRpb25zIG9mIGNvZGUgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzCiAgICByYW5nZS4gIFVzZWZ1bCBpZiB5b3UgYXJlIGRlYnVnZ2luZyBhIEpJVCBjb21waWxlciBvciBzb21lIG90aGVyCiAgICBkeW5hbWljIGNvZGUgZ2VuZXJhdGlvbiBzeXN0ZW0uICBBZnRlciB0aGlzIGNhbGwsIGF0dGVtcHRzIHRvCiAgICBleGVjdXRlIGNvZGUgaW4gdGhlIGludmFsaWRhdGVkIGFkZHJlc3MgcmFuZ2Ugd2lsbCBjYXVzZQogICAgVmFsZ3JpbmQgdG8gbWFrZSBuZXcgdHJhbnNsYXRpb25zIG9mIHRoYXQgY29kZSwgd2hpY2ggaXMKICAgIHByb2JhYmx5IHRoZSBzZW1hbnRpY3MgeW91IHdhbnQuICBOb3RlIHRoYXQgY29kZSBpbnZhbGlkYXRpb25zCiAgICBhcmUgZXhwZW5zaXZlIGJlY2F1c2UgZmluZGluZyBhbGwgdGhlIHJlbGV2YW50IHRyYW5zbGF0aW9ucwogICAgcXVpY2tseSBpcyB2ZXJ5IGRpZmZpY3VsdCwgc28gdHJ5IG5vdCB0byBjYWxsIGl0IG9mdGVuLgogICAgTm90ZSB0aGF0IHlvdSBjYW4gYmUgY2xldmVyIGFib3V0CiAgICB0aGlzOiB5b3Ugb25seSBuZWVkIHRvIGNhbGwgaXQgd2hlbiBhbiBhcmVhIHdoaWNoIHByZXZpb3VzbHkKICAgIGNvbnRhaW5lZCBjb2RlIGlzIG92ZXJ3cml0dGVuIHdpdGggbmV3IGNvZGUuICBZb3UgY2FuIGNob29zZQogICAgdG8gd3JpdGUgY29kZSBpbnRvIGZyZXNoIG1lbW9yeSwgYW5kIGp1c3QgY2FsbCB0aGlzCiAgICBvY2Nhc2lvbmFsbHkgdG8gZGlzY2FyZCBsYXJnZSBjaHVua3Mgb2Ygb2xkIGNvZGUgYWxsIGF0CiAgICBvbmNlLjwvcD4KPHA+CiAgICBBbHRlcm5hdGl2ZWx5LCBmb3IgdHJhbnNwYXJlbnQgc2VsZi1tb2RpZnlpbmctY29kZSBzdXBwb3J0LAogICAgdXNlPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zbWMtY2hlY2s9YWxsPC9jb2RlPiwgb3IgcnVuCiAgICBvbiBwcGMzMi9MaW51eCwgcHBjNjQvTGludXggb3IgQVJNL0xpbnV4LgogICAgPC9wPgo8L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfQ09VTlRfRVJST1JTPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD48cD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIGZvdW5kIHNvIGZhciBieSBWYWxncmluZC4gIENhbiBiZQogICAgdXNlZnVsIGluIHRlc3QgaGFybmVzcyBjb2RlIHdoZW4gY29tYmluZWQgd2l0aCB0aGUKICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9nLWZkPS0xPC9jb2RlPiBvcHRpb247IHRoaXMgcnVucyBWYWxncmluZCBzaWxlbnRseSwKICAgIGJ1dCB0aGUgY2xpZW50IHByb2dyYW0gY2FuIGRldGVjdCB3aGVuIGVycm9ycyBvY2N1ci4gIE9ubHkgdXNlZnVsCiAgICBmb3IgdG9vbHMgdGhhdCByZXBvcnQgZXJyb3JzLCBlLmcuIGl0J3MgdXNlZnVsIGZvciBNZW1jaGVjaywgYnV0IGZvcgogICAgQ2FjaGVncmluZCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gemVybyBiZWNhdXNlIENhY2hlZ3JpbmQgZG9lc24ndAogICAgcmVwb3J0IGVycm9ycy48L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX01BTExPQ0xJS0VfQkxPQ0s8L2NvZGU+Ojwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD4KPGRkPjxwPklmIHlvdXIgcHJvZ3JhbSBtYW5hZ2VzIGl0cyBvd24gbWVtb3J5IGluc3RlYWQgb2YgdXNpbmcKICAgIHRoZSBzdGFuZGFyZCA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1hbGxvYzwvY29kZT4gLwogICAgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5uZXc8L2NvZGU+IC8KICAgIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bmV3W108L2NvZGU+LCB0b29scyB0aGF0IHRyYWNrCiAgICBpbmZvcm1hdGlvbiBhYm91dCBoZWFwIGJsb2NrcyB3aWxsIG5vdCBkbyBuZWFybHkgYXMgZ29vZCBhCiAgICBqb2IuICBGb3IgZXhhbXBsZSwgTWVtY2hlY2sgd29uJ3QgZGV0ZWN0IG5lYXJseSBhcyBtYW55CiAgICBlcnJvcnMsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZXMgd29uJ3QgYmUgYXMgaW5mb3JtYXRpdmUuICBUbwogICAgaW1wcm92ZSB0aGlzIHNpdHVhdGlvbiwgdXNlIHRoaXMgbWFjcm8ganVzdCBhZnRlciB5b3VyIGN1c3RvbQogICAgYWxsb2NhdG9yIGFsbG9jYXRlcyBzb21lIG5ldyBtZW1vcnkuICBTZWUgdGhlIGNvbW1lbnRzIGluCiAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZhbGdyaW5kLmg8L2NvZGU+IGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCiAgICBpdC48L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX0ZSRUVMSUtFX0JMT0NLPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD48cD5UaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTUFMTE9DTElLRV9CTE9DSzwvY29kZT4uCiAgICBBZ2Fpbiwgc2VlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dmFsZ3JpbmQuaDwvY29kZT4gZm9yCiAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGl0LjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfUkVTSVpFSU5QTEFDRV9CTE9DSzwvY29kZT46PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0Pgo8ZGQ+PHA+SW5mb3JtcyBhIFZhbGdyaW5kIHRvb2wgdGhhdCB0aGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2sgaGFzIGJlZW4KICAgIG1vZGlmaWVkIGJ1dCBub3QgaXRzIGFkZHJlc3MuIFNlZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZhbGdyaW5kLmg8L2NvZGU+IGZvcgogICAgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGl0LjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPgogICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX0NSRUFURV9NRU1QT09MPC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj4sCiAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfREVTVFJPWV9NRU1QT09MPC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj4sCiAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTUVNUE9PTF9BTExPQzwvY29kZT48L3N0cm9uZz48L3NwYW4+LAogICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX01FTVBPT0xfRlJFRTwvY29kZT48L3N0cm9uZz48L3NwYW4+LAogICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX01PVkVfTUVNUE9PTDwvY29kZT48L3N0cm9uZz48L3NwYW4+LAogICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX01FTVBPT0xfQ0hBTkdFPC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj4sCiAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTUVNUE9PTF9FWElTVFM8L2NvZGU+PC9zdHJvbmc+PC9zcGFuPjoKICAgPC9zcGFuPjwvZHQ+CjxkZD48cD5UaGVzZSBhcmUgc2ltaWxhciB0byAKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTUFMTE9DTElLRV9CTE9DSzwvY29kZT4gYW5kCiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX0ZSRUVMSUtFX0JMT0NLPC9jb2RlPgogICAgYnV0IGFyZSB0YWlsb3JlZCB0b3dhcmRzIGNvZGUgdGhhdCB1c2VzIG1lbW9yeSBwb29scy4gIFNlZSAKICAgIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSJtYy1tYW51YWwuaHRtbCNtYy1tYW51YWwubWVtcG9vbHMiIHRpdGxlPSI0LjguoE1lbW9yeSBQb29sczogZGVzY3JpYmluZyBhbmQgd29ya2luZyB3aXRoIGN1c3RvbSBhbGxvY2F0b3JzIj5NZW1vcnkgUG9vbHM8L2E+IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTk9OX1NJTURfQ0FMTFswMTIzXTwvY29kZT46PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0Pgo8ZGQ+CjxwPkV4ZWN1dGVzIGEgZnVuY3Rpb24gaW4gdGhlIGNsaWVudCBwcm9ncmFtIG9uIHRoZQogICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVhbDwvZW0+PC9zcGFuPiBDUFUsIG5vdCB0aGUgdmlydHVhbCBDUFUgdGhhdCBWYWxncmluZAogICAgbm9ybWFsbHkgcnVucyBjb2RlIG9uLiAgVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBhbiBpbnRlZ2VyIChob2xkaW5nIGEKICAgIHRocmVhZCBJRCkgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCB0aGVuIDAsIDEsIDIgb3IgMyBtb3JlIGFyZ3VtZW50cwogICAgKGRlcGVuZGluZyBvbiB3aGljaCBjbGllbnQgcmVxdWVzdCBpcyB1c2VkKS4gIFRoZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMKICAgIHdheXMgaW50ZXJuYWxseSB0byBWYWxncmluZC4gIFRoZXkgbWlnaHQgYmUgdXNlZnVsIHRvIGNsaWVudAogICAgcHJvZ3JhbXMuPC9wPgo8cD48c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPjwvc3Bhbj4gT25seSB1c2UgdGhlc2UgaWYgeW91CiAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZWFsbHk8L2VtPjwvc3Bhbj4ga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICBUaGV5IGFyZW4ndCAKICAgIGVudGlyZWx5IHJlbGlhYmxlLCBhbmQgY2FuIGNhdXNlIFZhbGdyaW5kIHRvIGNyYXNoLiAgU2VlCiAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZhbGdyaW5kLmg8L2NvZGU+IGZvciBtb3JlIGRldGFpbHMuCiAgICA8L3A+CjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9QUklOVEYoZm9ybWF0LCAuLi4pPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD48cD5QcmludCBhIHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIHRoZSBWYWxncmluZCBsb2cgZmlsZS4gIFRoZQogICAgbWVzc2FnZSBpcyBwcmVmaXhlZCB3aXRoIHRoZSBQSUQgYmV0d2VlbiBhIHBhaXIgb2YKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Kio8L2NvZGU+IG1hcmtlcnMuICAoTGlrZSBhbGwgY2xpZW50IHJlcXVlc3RzLAogICAgbm90aGluZyBpcyBvdXRwdXQgaWYgdGhlIGNsaWVudCBwcm9ncmFtIGlzIG5vdCBydW5uaW5nIHVuZGVyIFZhbGdyaW5kLikKICAgIE91dHB1dCBpcyBub3QgcHJvZHVjZWQgdW50aWwgYSBuZXdsaW5lIGlzIGVuY291bnRlcmVkLCBvciBzdWJzZXF1ZW50CiAgICBWYWxncmluZCBvdXRwdXQgaXMgcHJpbnRlZDsgdGhpcyBhbGxvd3MgeW91IHRvIGJ1aWxkIHVwIGEgc2luZ2xlIGxpbmUgb2YKICAgIG91dHB1dCBvdmVyIG11bHRpcGxlIGNhbGxzLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgb3V0cHV0LAogICAgZXhjbHVkaW5nIHRoZSBQSUQgcHJlZml4LjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfUFJJTlRGX0JBQ0tUUkFDRShmb3JtYXQsIC4uLik8L2NvZGU+Ojwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9kdD4KPGRkPjxwPkxpa2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9QUklOVEY8L2NvZGU+IChpbgogICAgcGFydGljdWxhciwgdGhlIHJldHVybiB2YWx1ZSBpcyBpZGVudGljYWwpLCBidXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlCiAgICBpbW1lZGlhdGVseSBhZnRlcndhcmRzLjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfTU9OSVRPUl9DT01NQU5EKGNvbW1hbmQpPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD48cD5FeGVjdXRlIHRoZSBnaXZlbiBtb25pdG9yIGNvbW1hbmQgKGEgc3RyaW5nKS4KICAgIFJldHVybnMgMCBpZiBjb21tYW5kIGlzIHJlY29nbmlzZWQuIFJldHVybnMgMSBpZiBjb21tYW5kIGlzIG5vdCByZWNvZ25pc2VkLgogICAgTm90ZSB0aGF0IHNvbWUgbW9uaXRvciBjb21tYW5kcyBwcm92aWRlIGFjY2VzcyB0byBhIGZ1bmN0aW9uYWxpdHkKICAgIGFsc28gYWNjZXNzaWJsZSB2aWEgYSBzcGVjaWZpYyBjbGllbnQgcmVxdWVzdC4gRm9yIGV4YW1wbGUsCiAgICBtZW1jaGVjayBsZWFrIHNlYXJjaCBjYW4gYmUgcmVxdWVzdGVkIGZyb20gdGhlIGNsaWVudCBwcm9ncmFtCiAgICB1c2luZyBWQUxHUklORF9ET19MRUFLX0NIRUNLIG9yIHZpYSB0aGUgbW9uaXRvciBjb21tYW5kICJsZWFrX3NlYXJjaCIuCiAgICBOb3RlIHRoYXQgdGhlIHN5bnRheCBvZiB0aGUgY29tbWFuZCBzdHJpbmcgaXMgb25seSB2ZXJpZmllZCBhdAogICAgcnVuLXRpbWUuIFNvLCBpZiBpdCBleGlzdHMsIGl0IGlzIHByZWZlcmFibGUgdG8gdXNlIGEgc3BlY2lmaWMKICAgIGNsaWVudCByZXF1ZXN0IHRvIGhhdmUgYmV0dGVyIGNvbXBpbGUgdGltZSB2ZXJpZmljYXRpb25zIG9mIHRoZQogICAgYXJndW1lbnRzLgogICAgPC9wPjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9TVEFDS19SRUdJU1RFUihzdGFydCwgZW5kKTwvY29kZT46PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0Pgo8ZGQ+CjxwPlJlZ2lzdGVycyBhIG5ldyBzdGFjay4gIEluZm9ybXMgVmFsZ3JpbmQgdGhhdCB0aGUgbWVtb3J5IHJhbmdlCiAgICBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgaXMgYSB1bmlxdWUgc3RhY2suICBSZXR1cm5zIGEgc3RhY2sgaWRlbnRpZmllcgogICAgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG90aGVyCiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPlZBTEdSSU5EX1NUQUNLXyo8L2NvZGU+IGNhbGxzLjwvcD4KPHA+VmFsZ3JpbmQgd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBjaGFuZ2UKICAgIHRvIHRoZSBzdGFjayBwb2ludGVyIGlzIGFuIGl0ZW0gcHVzaGVkIG9udG8gdGhlIHN0YWNrIG9yIGEgY2hhbmdlCiAgICBvdmVyIHRvIGEgbmV3IHN0YWNrLiAgVXNlIHRoaXMgaWYgeW91J3JlIHVzaW5nIGEgdXNlci1sZXZlbCB0aHJlYWQKICAgIHBhY2thZ2UgYW5kIGFyZSBub3RpY2luZyBjcmFzaGVzIGluIHN0YWNrIHRyYWNlIHJlY29yZGluZyBvcgogICAgc3B1cmlvdXMgZXJyb3JzIGZyb20gVmFsZ3JpbmQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkKICAgIHJlYWRzLjwvcD4KPHA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz48L3NwYW4+IFVuZm9ydHVuYXRlbHksIHRoaXMgY2xpZW50IHJlcXVlc3QgaXMKICAgIHVucmVsaWFibGUgYW5kIGJlc3QgYXZvaWRlZC48L3A+CjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9TVEFDS19ERVJFR0lTVEVSKGlkKTwvY29kZT46PC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2R0Pgo8ZGQ+CjxwPkRlcmVnaXN0ZXJzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHN0YWNrLiAgSW5mb3JtcwogICAgVmFsZ3JpbmQgdGhhdCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWVtb3J5IHJhbmdlIHdpdGggc3RhY2sgaWQKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+aWQ8L2NvZGU+IGlzIG5vIGxvbmdlciBhIHN0YWNrLjwvcD4KPHA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz48L3NwYW4+IFVuZm9ydHVuYXRlbHksIHRoaXMgY2xpZW50IHJlcXVlc3QgaXMKICAgIHVucmVsaWFibGUgYW5kIGJlc3QgYXZvaWRlZC48L3A+CjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9TVEFDS19DSEFOR0UoaWQsIHN0YXJ0LCBlbmQpPC9jb2RlPjo8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvZHQ+CjxkZD4KPHA+Q2hhbmdlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBzdGFjay4gIEluZm9ybXMKICAgIFZhbGdyaW5kIHRoYXQgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBzdGFjayB3aXRoIHN0YWNrIGlkCiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmlkPC9jb2RlPiBoYXMgY2hhbmdlZCBpdHMgc3RhcnQgYW5kIGVuZAogICAgdmFsdWVzLiAgVXNlIHRoaXMgaWYgeW91ciB1c2VyLWxldmVsIHRocmVhZCBwYWNrYWdlIGltcGxlbWVudHMKICAgIHN0YWNrIGdyb3d0aC48L3A+CjxwPjxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+PC9zcGFuPiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNsaWVudCByZXF1ZXN0IGlzCiAgICB1bnJlbGlhYmxlIGFuZCBiZXN0IGF2b2lkZWQuPC9wPgo8L2RkPgo8L2RsPjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDEiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyIj48L2E+My4yLqBEZWJ1Z2dpbmcgeW91ciBwcm9ncmFtIHVzaW5nIFZhbGdyaW5kIGdkYnNlcnZlciBhbmQgR0RCPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+QSBwcm9ncmFtIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQgaXMgbm90IGV4ZWN1dGVkIGRpcmVjdGx5IGJ5IHRoZQpDUFUuICBJbnN0ZWFkIGl0IHJ1bnMgb24gYSBzeW50aGV0aWMgQ1BVIHByb3ZpZGVkIGJ5IFZhbGdyaW5kLiAgVGhpcyBpcwp3aHkgYSBkZWJ1Z2dlciBjYW5ub3QgZGVidWcgeW91ciBwcm9ncmFtIHdoZW4gaXQgcnVucyBvbiBWYWxncmluZC4KPC9wPgo8cD4KVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgR0RCIGNhbiBpbnRlcmFjdCB3aXRoIHRoZQpWYWxncmluZCBnZGJzZXJ2ZXIgdG8gcHJvdmlkZSBhIGZ1bGx5IGRlYnVnZ2FibGUgcHJvZ3JhbSB1bmRlcgpWYWxncmluZC4gVXNlZCBpbiB0aGlzIHdheSwgR0RCIGFsc28gcHJvdmlkZXMgYW4gaW50ZXJhY3RpdmUgdXNhZ2Ugb2YKVmFsZ3JpbmQgY29yZSBvciB0b29sIGZ1bmN0aW9uYWxpdGllcywgaW5jbHVkaW5nIGluY3JlbWVudGFsIGxlYWsgc2VhcmNoCnVuZGVyIE1lbWNoZWNrIGFuZCBvbi1kZW1hbmQgTWFzc2lmIHNuYXBzaG90IHByb2R1Y3Rpb24uCjwvcD4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1zaW1wbGUiPjwvYT4zLjIuMS6gUXVpY2sgU3RhcnQ6IGRlYnVnZ2luZyBpbiAzIHN0ZXBzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+VGhlIHNpbXBsZXN0IHdheSB0byBnZXQgc3RhcnRlZCBpcyB0byBydW4gVmFsZ3JpbmQgd2l0aCB0aGUKZmxhZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGItZXJyb3I9MDwvY29kZT4uICBUaGVuIGZvbGxvdyB0aGUgb24tc2NyZWVuCmRpcmVjdGlvbnMsIHdoaWNoIGdpdmUgeW91IHRoZSBwcmVjaXNlIGNvbW1hbmRzIG5lZWRlZCB0byBzdGFydCBHREIKYW5kIGNvbm5lY3QgaXQgdG8geW91ciBwcm9ncmFtLjwvcD4KPHA+T3RoZXJ3aXNlLCBoZXJlJ3MgYSBzbGlnaHRseSBtb3JlIHZlcmJvc2Ugb3ZlcnZpZXcuPC9wPgo8cD5JZiB5b3Ugd2FudCB0byBkZWJ1ZyBhIHByb2dyYW0gd2l0aCBHREIgd2hlbiB1c2luZyB0aGUgTWVtY2hlY2sKdG9vbCwgc3RhcnQgVmFsZ3JpbmQgbGlrZSB0aGlzOgo8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CnZhbGdyaW5kIC0tdmdkYj15ZXMgLS12Z2RiLWVycm9yPTAgcHJvZwo8L3ByZT4KPHA+SW4gYW5vdGhlciBzaGVsbCwgc3RhcnQgR0RCOgo8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CmdkYiBwcm9nCjwvcHJlPgo8cD5UaGVuIGdpdmUgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIEdEQjoKPC9wPgo8cHJlIGNsYXNzPSJzY3JlZW4iPgooZ2RiKSB0YXJnZXQgcmVtb3RlIHwgdmdkYgo8L3ByZT4KPHA+WW91IGNhbiBub3cgZGVidWcgeW91ciBwcm9ncmFtIGUuZy4gYnkgaW5zZXJ0aW5nIGEgYnJlYWtwb2ludAphbmQgdGhlbiB1c2luZyB0aGUgR0RCIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Y29udGludWU8L2NvZGU+CmNvbW1hbmQuPC9wPgo8cD5UaGlzIHF1aWNrIHN0YXJ0IGluZm9ybWF0aW9uIGlzIGVub3VnaCBmb3IgYmFzaWMgdXNhZ2Ugb2YgdGhlClZhbGdyaW5kIGdkYnNlcnZlci4gIFRoZSBzZWN0aW9ucyBiZWxvdyBkZXNjcmliZSBtb3JlIGFkdmFuY2VkCmZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhlIGNvbWJpbmF0aW9uIG9mIFZhbGdyaW5kIGFuZCBHREIuIE5vdGUKdGhhdCB0aGUgY29tbWFuZCBsaW5lIGZsYWcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiPXllczwvY29kZT4gY2FuIGJlIG9taXR0ZWQsCmFzIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3QyIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9Im1hbnVhbC1jb3JlLWFkdi5nZGJzZXJ2ZXItY29uY2VwdCI+PC9hPjMuMi4yLqBWYWxncmluZCBnZGJzZXJ2ZXIgb3ZlcmFsbCBvcmdhbmlzYXRpb248L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD5UaGUgR05VIEdEQiBkZWJ1Z2dlciBpcyB0eXBpY2FsbHkgdXNlZCB0byBkZWJ1ZyBhIHByb2Nlc3MKcnVubmluZyBvbiB0aGUgc2FtZSBtYWNoaW5lLiAgSW4gdGhpcyBtb2RlLCBHREIgdXNlcyBzeXN0ZW0gY2FsbHMgdG8KY29udHJvbCBhbmQgcXVlcnkgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQuICBUaGlzIHdvcmtzIHdlbGwsIGJ1dApvbmx5IGFsbG93cyBHREIgdG8gZGVidWcgYSBwcm9ncmFtIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIuCjwvcD4KPHA+R0RCIGNhbiBhbHNvIGRlYnVnIHByb2Nlc3NlcyBydW5uaW5nIG9uIGEgZGlmZmVyZW50IGNvbXB1dGVyLgpUbyBhY2hpZXZlIHRoaXMsIEdEQiBkZWZpbmVzIGEgcHJvdG9jb2wgKHRoYXQgaXMsIGEgc2V0IG9mIHF1ZXJ5IGFuZApyZXBseSBwYWNrZXRzKSB0aGF0IGZhY2lsaXRhdGVzIGZldGNoaW5nIHRoZSB2YWx1ZSBvZiBtZW1vcnkgb3IKcmVnaXN0ZXJzLCBzZXR0aW5nIGJyZWFrcG9pbnRzLCBldGMuICBBIGdkYnNlcnZlciBpcyBhbiBpbXBsZW1lbnRhdGlvbgpvZiB0aGlzICJHREIgcmVtb3RlIGRlYnVnZ2luZyIgcHJvdG9jb2wuICBUbyBkZWJ1ZyBhIHByb2Nlc3MgcnVubmluZwpvbiBhIHJlbW90ZSBjb21wdXRlciwgYSBnZGJzZXJ2ZXIgKHNvbWV0aW1lcyBjYWxsZWQgYSBHREIgc3R1YikKbXVzdCBydW4gYXQgdGhlIHJlbW90ZSBjb21wdXRlciBzaWRlLgo8L3A+CjxwPlRoZSBWYWxncmluZCBjb3JlIHByb3ZpZGVzIGEgYnVpbHQtaW4gZ2Ric2VydmVyIGltcGxlbWVudGF0aW9uLAp3aGljaCBpcyBhY3RpdmF0ZWQgdXNpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiPXllczwvY29kZT4Kb3IgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiPWZ1bGw8L2NvZGU+LiAgVGhpcyBnZGJzZXJ2ZXIgYWxsb3dzIHRoZSBwcm9jZXNzCnJ1bm5pbmcgb24gVmFsZ3JpbmQncyBzeW50aGV0aWMgQ1BVIHRvIGJlIGRlYnVnZ2VkIHJlbW90ZWx5LgpHREIgc2VuZHMgcHJvdG9jb2wgcXVlcnkgcGFja2V0cyAoc3VjaCBhcyAiZ2V0IHJlZ2lzdGVyIGNvbnRlbnRzIikgdG8KdGhlIFZhbGdyaW5kIGVtYmVkZGVkIGdkYnNlcnZlci4gIFRoZSBnZGJzZXJ2ZXIgZXhlY3V0ZXMgdGhlIHF1ZXJpZXMKKGZvciBleGFtcGxlLCBpdCB3aWxsIGdldCB0aGUgcmVnaXN0ZXIgdmFsdWVzIG9mIHRoZSBzeW50aGV0aWMgQ1BVKQphbmQgZ2l2ZXMgdGhlIHJlc3VsdHMgYmFjayB0byBHREIuCjwvcD4KPHA+R0RCIGNhbiB1c2UgdmFyaW91cyBraW5kcyBvZiBjaGFubmVscyAoVENQL0lQLCBzZXJpYWwgbGluZSwgZXRjKQp0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBnZGJzZXJ2ZXIuICBJbiB0aGUgY2FzZSBvZiBWYWxncmluZCdzCmdkYnNlcnZlciwgY29tbXVuaWNhdGlvbiBpcyBkb25lIHZpYSBhIHBpcGUgYW5kIGEgc21hbGwgaGVscGVyIHByb2dyYW0KY2FsbGVkIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSJtYW51YWwtY29yZS1hZHYuaHRtbCNtYW51YWwtY29yZS1hZHYudmdkYiIgdGl0bGU9IjMuMi45LqB2Z2RiIGNvbW1hbmQgbGluZSBvcHRpb25zIj52Z2RiPC9hPiwgd2hpY2ggYWN0cyBhcyBhbgppbnRlcm1lZGlhcnkuICBJZiBubyBHREIgaXMgaW4gdXNlLCB2Z2RiIGNhbiBhbHNvIGJlCnVzZWQgdG8gc2VuZCBtb25pdG9yIGNvbW1hbmRzIHRvIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgZnJvbSBhIHNoZWxsCmNvbW1hbmQgbGluZS4KPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1nZGIiPjwvYT4zLjIuMy6gQ29ubmVjdGluZyBHREIgdG8gYSBWYWxncmluZCBnZGJzZXJ2ZXI8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD5UbyBkZWJ1ZyBhIHByb2dyYW0gIjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+cHJvZzwvY29kZT4iIHJ1bm5pbmcgdW5kZXIKVmFsZ3JpbmQsIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgaXMgYWN0aXZhdGVkIGJ5CnNwZWNpZnlpbmcgZWl0aGVyIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYj15ZXM8L2NvZGU+Cm9yIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYj1mdWxsPC9jb2RlPi4gIEEgc2Vjb25kYXJ5IGNvbW1hbmQgbGluZSBvcHRpb24sCjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYi1lcnJvcj1udW1iZXI8L2NvZGU+LCBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBnZGJzZXJ2ZXIKb25seSB0byBiZWNvbWUgYWN0aXZlIG9uY2UgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZXJyb3JzIGhhdmUgYmVlbgpzaG93bi4gIEEgdmFsdWUgb2YgemVybyB3aWxsIHRoZXJlZm9yZSBjYXVzZQp0aGUgZ2Ric2VydmVyIHRvIGJlY29tZSBhY3RpdmUgYXQgc3RhcnR1cCwgd2hpY2ggYWxsb3dzIHlvdSB0bwppbnNlcnQgYnJlYWtwb2ludHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBydW4uICBGb3IgZXhhbXBsZToKPC9wPgo8cHJlIGNsYXNzPSJzY3JlZW4iPgp2YWxncmluZCAtLXRvb2w9bWVtY2hlY2sgLS12Z2RiPXllcyAtLXZnZGItZXJyb3I9MCAuL3Byb2cKPC9wcmU+CjxwPlRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgaXMgaW52b2tlZCBhdCBzdGFydHVwCmFuZCBpbmRpY2F0ZXMgaXQgaXMgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uIGZyb20gYSBHREI6PC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Cj09MjQxOD09IE1lbWNoZWNrLCBhIG1lbW9yeSBlcnJvciBkZXRlY3Rvcgo9PTI0MTg9PSBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNywgYW5kIEdOVSBHUEwnZCwgYnkgSnVsaWFuIFNld2FyZCBldCBhbC4KPT0yNDE4PT0gVXNpbmcgVmFsZ3JpbmQtMy4xMy4wLlNWTiBhbmQgTGliVkVYOyByZXJ1biB3aXRoIC1oIGZvciBjb3B5cmlnaHQgaW5mbwo9PTI0MTg9PSBDb21tYW5kOiAuL3Byb2cKPT0yNDE4PT0gCj09MjQxOD09IChhY3Rpb24gYXQgc3RhcnR1cCkgdmdkYiBtZSAuLi4gCjwvcHJlPgo8cD5HREIgKGluIGFub3RoZXIgc2hlbGwpIGNhbiB0aGVuIGJlIGNvbm5lY3RlZCB0byB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyLgpGb3IgdGhpcywgR0RCIG11c3QgYmUgc3RhcnRlZCBvbiB0aGUgcHJvZ3JhbSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnByb2c8L2NvZGU+Ogo8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CmdkYiAuL3Byb2cKPC9wcmU+CjxwPllvdSB0aGVuIGluZGljYXRlIHRvIEdEQiB0aGF0IHlvdSB3YW50IHRvIGRlYnVnIGEgcmVtb3RlIHRhcmdldDoKPC9wPgo8cHJlIGNsYXNzPSJzY3JlZW4iPgooZ2RiKSB0YXJnZXQgcmVtb3RlIHwgdmdkYgo8L3ByZT4KPHA+CkdEQiB0aGVuIHN0YXJ0cyBhIHZnZGIgcmVsYXkgYXBwbGljYXRpb24gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgClZhbGdyaW5kIGVtYmVkZGVkIGdkYnNlcnZlcjo8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKGdkYikgdGFyZ2V0IHJlbW90ZSB8IHZnZGIKUmVtb3RlIGRlYnVnZ2luZyB1c2luZyB8IHZnZGIKcmVsYXlpbmcgZGF0YSBiZXR3ZWVuIGdkYiBhbmQgcHJvY2VzcyAyNDE4ClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGQtbGludXguc28uMi4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC91c3IvbGliL2RlYnVnL2xpYi9sZC0yLjExLjIuc28uZGVidWcuLi5kb25lLgpMb2FkZWQgc3ltYm9scyBmb3IgL2xpYi9sZC1saW51eC5zby4yCltTd2l0Y2hpbmcgdG8gVGhyZWFkIDI0MThdCjB4MDAxZjI4NTAgaW4gX3N0YXJ0ICgpIGZyb20gL2xpYi9sZC1saW51eC5zby4yCihnZGIpIAo8L3ByZT4KPHA+Tm90ZSB0aGF0IHZnZGIgaXMgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgVmFsZ3JpbmQKZGlzdHJpYnV0aW9uLiAgWW91IGRvIG5vdCBuZWVkIHRvIGluc3RhbGwgaXQgc2VwYXJhdGVseS48L3A+CjxwPklmIHZnZGIgZGV0ZWN0cyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBWYWxncmluZCBnZGJzZXJ2ZXJzIHRoYXQKY2FuIGJlIGNvbm5lY3RlZCB0bywgaXQgd2lsbCBsaXN0IGFsbCBzdWNoIHNlcnZlcnMgYW5kIHRoZWlyIFBJRHMsIGFuZAp0aGVuIGV4aXQuICBZb3UgY2FuIHRoZW4gcmVpc3N1ZSB0aGUgR0RCICJ0YXJnZXQiIGNvbW1hbmQsIGJ1dApzcGVjaWZ5aW5nIHRoZSBQSUQgb2YgdGhlIHByb2Nlc3MgeW91IHdhbnQgdG8gZGVidWc6CjwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgooZ2RiKSB0YXJnZXQgcmVtb3RlIHwgdmdkYgpSZW1vdGUgZGVidWdnaW5nIHVzaW5nIHwgdmdkYgpubyAtLXBpZD0gYXJnIGdpdmVuIGFuZCBtdWx0aXBsZSB2YWxncmluZCBwaWRzIGZvdW5kOgp1c2UgLS1waWQ9MjQ3OSBmb3IgdmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC0tdmdkYj15ZXMgLS12Z2RiLWVycm9yPTAgLi9wcm9nIAp1c2UgLS1waWQ9MjQ4MSBmb3IgdmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC0tdmdkYj15ZXMgLS12Z2RiLWVycm9yPTAgLi9wcm9nIAp1c2UgLS1waWQ9MjQ4MyBmb3IgdmFsZ3JpbmQgLS12Z2RiPXllcyAtLXZnZGItZXJyb3I9MCAuL2Fub3RoZXJfcHJvZyAKUmVtb3RlIGNvbW11bmljYXRpb24gZXJyb3I6IFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLgooZ2RiKSAgdGFyZ2V0IHJlbW90ZSB8IHZnZGIgLS1waWQ9MjQ3OQpSZW1vdGUgZGVidWdnaW5nIHVzaW5nIHwgdmdkYiAtLXBpZD0yNDc5CnJlbGF5aW5nIGRhdGEgYmV0d2VlbiBnZGIgYW5kIHByb2Nlc3MgMjQ3OQpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xkLWxpbnV4LnNvLjIuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL2xpYi9kZWJ1Zy9saWIvbGQtMi4xMS4yLnNvLmRlYnVnLi4uZG9uZS4KTG9hZGVkIHN5bWJvbHMgZm9yIC9saWIvbGQtbGludXguc28uMgpbU3dpdGNoaW5nIHRvIFRocmVhZCAyNDc5XQoweDAwMWYyODUwIGluIF9zdGFydCAoKSBmcm9tIC9saWIvbGQtbGludXguc28uMgooZ2RiKSAKPC9wcmU+CjxwPk9uY2UgR0RCIGlzIGNvbm5lY3RlZCB0byB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyLCBpdCBjYW4gYmUgdXNlZAppbiB0aGUgc2FtZSB3YXkgYXMgaWYgeW91IHdlcmUgZGVidWdnaW5nIHRoZSBwcm9ncmFtIG5hdGl2ZWx5OjwvcD4KPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+QnJlYWtwb2ludHMgY2FuIGJlIGluc2VydGVkIG9yIGRlbGV0ZWQuPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlZhcmlhYmxlcyBhbmQgcmVnaXN0ZXIgdmFsdWVzIGNhbiBiZSBleGFtaW5lZCBvciBtb2RpZmllZC4KICAgIDwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5TaWduYWwgaGFuZGxpbmcgY2FuIGJlIGNvbmZpZ3VyZWQgKHByaW50aW5nLCBpZ25vcmluZykuCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+RXhlY3V0aW9uIGNhbiBiZSBjb250cm9sbGVkIChjb250aW51ZSwgc3RlcCwgbmV4dCwgc3RlcGksIGV0YykuCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UHJvZ3JhbSBleGVjdXRpb24gY2FuIGJlIGludGVycnVwdGVkIHVzaW5nIENvbnRyb2wtQy48L3A+PC9saT4KPC91bD48L2Rpdj4KPHA+QW5kIHNvIG9uLiAgUmVmZXIgdG8gdGhlIEdEQiB1c2VyIG1hbnVhbCBmb3IgYSBjb21wbGV0ZQpkZXNjcmlwdGlvbiBvZiBHREIncyBmdW5jdGlvbmFsaXR5Lgo8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0MiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYuZ2Ric2VydmVyLWdkYi1hbmRyb2lkIj48L2E+My4yLjQuoENvbm5lY3RpbmcgdG8gYW4gQW5kcm9pZCBnZGJzZXJ2ZXI8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD4gV2hlbiBkZXZlbG9wcGluZyBhcHBsaWNhdGlvbnMgZm9yIEFuZHJvaWQsIHlvdSB3aWxsIHR5cGljYWxseSB1c2UKYSBkZXZlbG9wbWVudCBzeXN0ZW0gKG9uIHdoaWNoIHRoZSBBbmRyb2lkIE5ESyBpcyBpbnN0YWxsZWQpIHRvIGNvbXBpbGUgeW91cgphcHBsaWNhdGlvbi4gQW4gQW5kcm9pZCB0YXJnZXQgc3lzdGVtIG9yIGVtdWxhdG9yIHdpbGwgYmUgdXNlZCB0byBydW4KdGhlIGFwcGxpY2F0aW9uLgpJbiB0aGlzIHNldHVwLCBWYWxncmluZCBhbmQgdmdkYiB3aWxsIHJ1biBvbiB0aGUgQW5kcm9pZCBzeXN0ZW0sCndoaWxlIEdEQiB3aWxsIHJ1biBvbiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtLiBHREIgd2lsbCBjb25uZWN0CnRvIHRoZSB2Z2RiIHJ1bm5pbmcgb24gdGhlIEFuZHJvaWQgc3lzdGVtIHVzaW5nIHRoZSBBbmRyb2lkIE5ESwonYWRiIGZvcndhcmQnIGFwcGxpY2F0aW9uLgo8L3A+CjxwPiBFeGFtcGxlOiBvbiB0aGUgQW5kcm9pZCBzeXN0ZW0sIGV4ZWN1dGUgdGhlIGZvbGxvd2luZzoKICAgIDwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KdmFsZ3JpbmQgLS12Z2RiLWVycm9yPTAgLS12Z2RiPXllcyBwcm9nCiMgYW5kIHRoZW4gaW4gYW5vdGhlciBzaGVsbCwgcnVuOgp2Z2RiIC0tcG9ydD0xMjM0CjwvcHJlPgo8cD4KPC9wPgo8cD4gT24gdGhlIGRldmVsb3BtZW50IHN5c3RlbSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgo8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CmFkYiBmb3J3YXJkIHRjcDoxMjM0IHRjcDoxMjM0CmdkYiBwcm9nCihnZGIpIHRhcmdldCByZW1vdGUgOjEyMzQKPC9wcmU+CjxwPgpHREIgd2lsbCB1c2UgYSBsb2NhbCB0Y3AvaXAgY29ubmVjdGlvbiB0byBjb25uZWN0IHRvIHRoZSBBbmRyb2lkIGFkYiBmb3J3YXJkZXIuCkFkYiB3aWxsIGVzdGFibGlzaCBhIHJlbGF5IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaG9zdCBzeXN0ZW0gYW5kIHRoZSBBbmRyb2lkCnRhcmdldCBzeXN0ZW0uICBCZSBzdXJlIHRvIHVzZSB0aGUgR0RCIGRlbGl2ZXJlZCBpbiB0aGUKQW5kcm9pZCBOREsgc3lzdGVtICh0eXBpY2FsbHksIGFybS1saW51eC1hbmRyb2lkZWFiaS1nZGIpLCBhcyB0aGUgaG9zdApHREIgaXMgcHJvYmFibHkgbm90IGFibGUgdG8gZGVidWcgQW5kcm9pZCBhcm0gYXBwbGljYXRpb25zLgpOb3RlIHRoYXQgdGhlIGxvY2FsIHBvcnQgbnIgKHVzZWQgYnkgR0RCKSBtdXN0IG5vdCBuZWNlc3NhcmlseSBiZSBlcXVhbAp0byB0aGUgcG9ydCBudW1iZXIgdXNlZCBieSB2Z2RiOiBhZGIgY2FuIGZvcndhcmQgdGNwL2lwIGJldHdlZW4gZGlmZmVyZW50CnBvcnQgbnVtYmVycy4KPC9wPgo8cD5JbiB0aGUgY3VycmVudCByZWxlYXNlLCB0aGUgR0RCIHNlcnZlciBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0CmZvciBBbmRyb2lkLCBkdWUgdG8gcHJvYmxlbXMgaW4gZXN0YWJsaXNoaW5nIGEgc3VpdGFibGUgZGlyZWN0b3J5IGluCndoaWNoIFZhbGdyaW5kIGNhbiBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBGSUZPcyAobmFtZWQgcGlwZXMpIGZvcgpjb21tdW5pY2F0aW9uIHB1cnBvc2VzLiAgWW91IGNhbiBzdGlsIHRyeSB0byB1c2UgdGhlIEdEQiBzZXJ2ZXIsIGJ1dAp5b3Ugd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IHVzaW5nIHRoZSBmbGFnIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi0tdmdkYj15ZXM8L2NvZGU+IG9yCjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS12Z2RiPWZ1bGw8L2NvZGU+Lgo8L3A+CjxwPkFkZGl0aW9uYWxseSwgeW91CndpbGwgbmVlZCB0byBzZWxlY3QgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdoaWNoIGlzIChhKSB3cml0YWJsZQpieSBWYWxncmluZCwgYW5kIChiKSBzdXBwb3J0cyBGSUZPcy4gIFRoaXMgaXMgdGhlIG1haW4gZGlmZmljdWx0CnBvaW50LiAgT2Z0ZW4sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+L3NkY2FyZDwvY29kZT4gc2F0aXNmaWVzCnJlcXVpcmVtZW50IChhKSwgYnV0IGZhaWxzIGZvciAoYikgYmVjYXVzZSBpdCBpcyBhIFZGQVQgZmlsZSBzeXN0ZW0KYW5kIFZGQVQgZG9lcyBub3Qgc3VwcG9ydCBwaXBlcy4gIFBvc3NpYmlsaXRpZXMgeW91IGNvdWxkIHRyeSBhcmUKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4vZGF0YS9sb2NhbDwvY29kZT4sCjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+L2RhdGEvbG9jYWwvSW5zdDwvY29kZT4gKGlmIHlvdQppbnN0YWxsZWQgVmFsZ3JpbmQgdGhlcmUpLCBvcgo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi9kYXRhL2RhdGEvbmFtZS5vZi5teS5hcHA8L2NvZGU+LCBpZiB5b3UKYXJlIHJ1bm5pbmcgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBhbmQgaXQgaGFzIGl0cyBvd24gZGlyZWN0b3J5IG9mIAp0aGF0IGZvcm0uICBUaGlzIGxhc3QgcG9zc2liaWxpdHkgbWF5IGhhdmUgdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkKb2Ygc3VjY2Vzcy48L3A+CjxwPllvdSBjYW4gc3BlY2lmeSB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UgZWl0aGVyIHZpYQp0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4tLXdpdGgtdG1wZGlyPTwvY29kZT4gY29uZmlndXJlIHRpbWUKZmxhZywgb3IgYnkgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIgd2hlbiBydW5uaW5nIFZhbGdyaW5kCihvbiB0aGUgQW5kcm9pZCBkZXZpY2UsIG5vdCBvbiB0aGUgQW5kcm9pZCBOREsgZGV2ZWxvcG1lbnQgaG9zdCkuCkFub3RoZXIgYWx0ZXJuYXRpdmUgaXMgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgRklGT3MgdXNpbmcKdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+LS12Z2RiLXByZWZpeD08L2NvZGU+IFZhbGdyaW5kIGNvbW1hbmQKbGluZSBvcHRpb24uCjwvcD4KPHA+V2UgaG9wZSB0byBoYXZlIGEgYmV0dGVyIHN0b3J5IGZvciB0ZW1wb3JhcnkgZGlyZWN0b3J5IGhhbmRsaW5nCm9uIEFuZHJvaWQgaW4gdGhlIGZ1dHVyZS4gIFRoZSBkaWZmaWN1bHR5IGlzIHRoYXQsIHVubGlrZSBpbiBzdGFuZGFyZApVbml4ZXMsIHRoZXJlIGlzIG5vIHNpbmdsZSB0ZW1wb3JhcnkgZmlsZSBkaXJlY3RvcnkgdGhhdCByZWxpYWJseQp3b3JrcyBhY3Jvc3MgYWxsIGRldmljZXMgYW5kIHNjZW5hcmlvcy4KPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1jb21tYW5kaGFuZGxpbmciPjwvYT4zLjIuNS6gTW9uaXRvciBjb21tYW5kIGhhbmRsaW5nIGJ5IHRoZSBWYWxncmluZCBnZGJzZXJ2ZXI8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD4gVGhlIFZhbGdyaW5kIGdkYnNlcnZlciBwcm92aWRlcyBhZGRpdGlvbmFsIFZhbGdyaW5kLXNwZWNpZmljCmZ1bmN0aW9uYWxpdHkgdmlhICJtb25pdG9yIGNvbW1hbmRzIi4gIFN1Y2ggbW9uaXRvciBjb21tYW5kcyBjYW4gYmUKc2VudCBmcm9tIHRoZSBHREIgY29tbWFuZCBsaW5lIG9yIGZyb20gdGhlIHNoZWxsIGNvbW1hbmQgbGluZSBvcgpyZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCBwcm9ncmFtIHVzaW5nIHRoZSBWQUxHUklORF9NT05JVE9SX0NPTU1BTkQKY2xpZW50IHJlcXVlc3QuICBTZWUKPGEgY2xhc3M9InhyZWYiIGhyZWY9Im1hbnVhbC1jb3JlLWFkdi5odG1sI21hbnVhbC1jb3JlLWFkdi52YWxncmluZC1tb25pdG9yLWNvbW1hbmRzIiB0aXRsZT0iMy4yLjEwLqBWYWxncmluZCBtb25pdG9yIGNvbW1hbmRzIj5WYWxncmluZCBtb25pdG9yIGNvbW1hbmRzPC9hPiBmb3IgdGhlCmxpc3Qgb2YgdGhlIFZhbGdyaW5kIGNvcmUgbW9uaXRvciBjb21tYW5kcyBhdmFpbGFibGUgcmVnYXJkbGVzcyBvZiB0aGUKVmFsZ3JpbmQgdG9vbCBzZWxlY3RlZC4KPC9wPgo8cD5UaGUgZm9sbG93aW5nIHRvb2xzIHByb3ZpZGUgdG9vbC1zcGVjaWZpYyBtb25pdG9yIGNvbW1hbmRzOgogIDwvcD4KPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGEgY2xhc3M9InhyZWYiIGhyZWY9Im1jLW1hbnVhbC5odG1sI21jLW1hbnVhbC5tb25pdG9yLWNvbW1hbmRzIiB0aXRsZT0iNC42LqBNZW1jaGVjayBNb25pdG9yIENvbW1hbmRzIj5NZW1jaGVjayBNb25pdG9yIENvbW1hbmRzPC9hPjwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YSBjbGFzcz0ieHJlZiIgaHJlZj0iY2wtbWFudWFsLmh0bWwjY2wtbWFudWFsLm1vbml0b3ItY29tbWFuZHMiIHRpdGxlPSI2LjQuoENhbGxncmluZCBNb25pdG9yIENvbW1hbmRzIj5DYWxsZ3JpbmQgTW9uaXRvciBDb21tYW5kczwvYT48L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGEgY2xhc3M9InhyZWYiIGhyZWY9Im1zLW1hbnVhbC5odG1sI21zLW1hbnVhbC5tb25pdG9yLWNvbW1hbmRzIiB0aXRsZT0iOS40LqBNYXNzaWYgTW9uaXRvciBDb21tYW5kcyI+TWFzc2lmIE1vbml0b3IgQ29tbWFuZHM8L2E+PC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxhIGNsYXNzPSJ4cmVmIiBocmVmPSJoZy1tYW51YWwuaHRtbCNoZy1tYW51YWwubW9uaXRvci1jb21tYW5kcyIgdGl0bGU9IjcuNy6gSGVsZ3JpbmQgTW9uaXRvciBDb21tYW5kcyI+SGVsZ3JpbmQgTW9uaXRvciBDb21tYW5kczwvYT48L3A+PC9saT4KPC91bD48L2Rpdj4KPHA+CjwvcD4KPHA+QW4gZXhhbXBsZSBvZiBhIHRvb2wgc3BlY2lmaWMgbW9uaXRvciBjb21tYW5kIGlzIHRoZSBNZW1jaGVjayBtb25pdG9yCmNvbW1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZWFrX2NoZWNrIGZ1bGwKcmVhY2hhYmxlIGFueTwvY29kZT4uICBUaGlzIHJlcXVlc3RzIGEgZnVsbCByZXBvcnRpbmcgb2YgdGhlCmFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiAgVG8gaGF2ZSB0aGlzIGxlYWsgY2hlY2sgZXhlY3V0ZWQsIHVzZSB0aGUgR0RCCmNvbW1hbmQ6CjwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KKGdkYikgbW9uaXRvciBsZWFrX2NoZWNrIGZ1bGwgcmVhY2hhYmxlIGFueQo8L3ByZT4KPHA+CjwvcD4KPHA+R0RCIHdpbGwgc2VuZCB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZWFrX2NoZWNrPC9jb2RlPgpjb21tYW5kIHRvIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIuICBUaGUgVmFsZ3JpbmQgZ2Ric2VydmVyIHdpbGwKZXhlY3V0ZSB0aGUgbW9uaXRvciBjb21tYW5kIGl0c2VsZiwgaWYgaXQgcmVjb2duaXNlcyBpdCB0byBiZSBhIFZhbGdyaW5kIGNvcmUKbW9uaXRvciBjb21tYW5kLiAgSWYgaXQgaXMgbm90IHJlY29nbmlzZWQgYXMgc3VjaCwgaXQgaXMgYXNzdW1lZCB0bwpiZSB0b29sLXNwZWNpZmljIGFuZCBpcyBoYW5kZWQgdG8gdGhlIHRvb2wgZm9yIGV4ZWN1dGlvbi4gIEZvciBleGFtcGxlOgo8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKGdkYikgbW9uaXRvciBsZWFrX2NoZWNrIGZ1bGwgcmVhY2hhYmxlIGFueQo9PTI0MTg9PSAxMDAgYnl0ZXMgaW4gMSBibG9ja3MgYXJlIHN0aWxsIHJlYWNoYWJsZSBpbiBsb3NzIHJlY29yZCAxIG9mIDEKPT0yNDE4PT0gICAgYXQgMHg0MDA2RTlFOiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MjM2KQo9PTI0MTg9PSAgICBieSAweDgwNDg4NEY6IG1haW4gKHByb2cuYzo4OCkKPT0yNDE4PT0gCj09MjQxOD09IExFQUsgU1VNTUFSWToKPT0yNDE4PT0gICAgZGVmaW5pdGVseSBsb3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzCj09MjQxOD09ICAgIGluZGlyZWN0bHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2Nrcwo9PTI0MTg9PSAgICAgIHBvc3NpYmx5IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MKPT0yNDE4PT0gICAgc3RpbGwgcmVhY2hhYmxlOiAxMDAgYnl0ZXMgaW4gMSBibG9ja3MKPT0yNDE4PT0gICAgICAgICBzdXBwcmVzc2VkOiAwIGJ5dGVzIGluIDAgYmxvY2tzCj09MjQxOD09IAooZ2RiKSAKPC9wcmU+CjxwPkFzIHdpdGggb3RoZXIgR0RCIGNvbW1hbmRzLCB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyIHdpbGwgYWNjZXB0CmFiYnJldmlhdGVkIG1vbml0b3IgY29tbWFuZCBuYW1lcyBhbmQgYXJndW1lbnRzLCBhcyBsb25nIGFzIHRoZSBnaXZlbgphYmJyZXZpYXRpb24gaXMgdW5hbWJpZ3VvdXMuICBGb3IgZXhhbXBsZSwgdGhlIGFib3ZlCjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGVha19jaGVjazwvY29kZT4KY29tbWFuZCBjYW4gYWxzbyBiZSB0eXBlZCBhczoKPC9wPgo8cHJlIGNsYXNzPSJzY3JlZW4iPgooZ2RiKSBtbyBsIGYgciBhCjwvcHJlPgo8cD4KClRoZSBsZXR0ZXJzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bW88L2NvZGU+IGFyZSByZWNvZ25pc2VkIGJ5IEdEQiBhcyBiZWluZwphbiBhYmJyZXZpYXRpb24gZm9yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bW9uaXRvcjwvY29kZT4uICBTbyBHREIgc2VuZHMgdGhlCnN0cmluZyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmwgZiByIGE8L2NvZGU+IHRvIHRoZSBWYWxncmluZApnZGJzZXJ2ZXIuICBUaGUgbGV0dGVycyBwcm92aWRlZCBpbiB0aGlzIHN0cmluZyBhcmUgdW5hbWJpZ3VvdXMgZm9yIHRoZQpWYWxncmluZCBnZGJzZXJ2ZXIuICBUaGlzIHRoZXJlZm9yZSBnaXZlcyB0aGUgc2FtZSBvdXRwdXQgYXMgdGhlCnVuYWJicmV2aWF0ZWQgY29tbWFuZCBhbmQgYXJndW1lbnRzLiAgSWYgdGhlIHByb3ZpZGVkIGFiYnJldmlhdGlvbiBpcwphbWJpZ3VvdXMsIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgd2lsbCByZXBvcnQgdGhlIGxpc3Qgb2YgY29tbWFuZHMgKG9yCmFyZ3VtZW50IHZhbHVlcykgdGhhdCBjYW4gbWF0Y2g6CjwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgooZ2RiKSBtbyB2LiBuCnYuIGNhbiBtYXRjaCB2LnNldCB2LmluZm8gdi53YWl0IHYua2lsbCB2LnRyYW5zbGF0ZSB2LmRvCihnZGIpIG1vIHYuaSBuCm5fZXJyc19mb3VuZCAwIG5fZXJyc19zaG93biAwICh2Z2RiLWVycm9yIDApCihnZGIpIAo8L3ByZT4KPHA+CjwvcD4KPHA+SW5zdGVhZCBvZiBzZW5kaW5nIGEgbW9uaXRvciBjb21tYW5kIGZyb20gR0RCLCB5b3UgY2FuIGFsc28gc2VuZAp0aGVzZSBmcm9tIGEgc2hlbGwgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZApsaW5lcywgd2hlbiBnaXZlbiBpbiBhIHNoZWxsLCB3aWxsIGNhdXNlIHRoZSBzYW1lIGxlYWsgc2VhcmNoIHRvIGJlIGV4ZWN1dGVkCmJ5IHRoZSBwcm9jZXNzIDMxNDU6CjwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KdmdkYiAtLXBpZD0zMTQ1IGxlYWtfY2hlY2sgZnVsbCByZWFjaGFibGUgYW55CnZnZGIgLS1waWQ9MzE0NSBsIGYgciBhCjwvcHJlPgo8cD5Ob3RlIHRoYXQgdGhlIFZhbGdyaW5kIGdkYnNlcnZlciBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlcyB0aGUKZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGFmdGVyIGEgc3RhbmRhbG9uZSBpbnZvY2F0aW9uIG9mCnZnZGIuICBNb25pdG9yIGNvbW1hbmRzIHNlbnQgZnJvbSBHREIgZG8gbm90IGNhdXNlIHRoZSBwcm9ncmFtIHRvCmNvbnRpbnVlOiB0aGUgcHJvZ3JhbSBleGVjdXRpb24gaXMgY29udHJvbGxlZCBleHBsaWNpdGx5IHVzaW5nIEdEQgpjb21tYW5kcyBzdWNoIGFzICJjb250aW51ZSIgb3IgIm5leHQiLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3QyIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9Im1hbnVhbC1jb3JlLWFkdi5nZGJzZXJ2ZXItdGhyZWFkcyI+PC9hPjMuMi42LqBWYWxncmluZCBnZGJzZXJ2ZXIgdGhyZWFkIGluZm9ybWF0aW9uPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+VmFsZ3JpbmQncyBnZGJzZXJ2ZXIgZW5yaWNoZXMgdGhlIG91dHB1dCBvZiB0aGUKR0RCIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+aW5mbyB0aHJlYWRzPC9jb2RlPiBjb21tYW5kCndpdGggVmFsZ3JpbmQtc3BlY2lmaWMgaW5mb3JtYXRpb24uClRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgdGhyZWFkIG51bWJlciBpcyBmb2xsb3dlZApieSBWYWxncmluZCdzIGludGVybmFsIGluZGV4IGZvciB0aGF0IHRocmVhZCAoInRpZCIpIGFuZCBieQp0aGUgVmFsZ3JpbmQgc2NoZWR1bGVyIHRocmVhZCBzdGF0ZTo8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKGdkYikgaW5mbyB0aHJlYWRzCiAgNCBUaHJlYWQgNjIzOSAodGlkIDQgVmdUc19ZaWVsZGluZykgIDB4MDAxZjI4MzIgaW4gX2RsX3N5c2luZm9faW50ODAgKCkgZnJvbSAvbGliL2xkLWxpbnV4LnNvLjIKKiAzIFRocmVhZCA2MjM4ICh0aWQgMyBWZ1RzX1J1bm5hYmxlKSAgbWFrZV9lcnJvciAocz0weDgwNDhiNzYgImNhbGxlZCBmcm9tIExvbmRvbiIpIGF0IHByb2cuYzoyMAogIDIgVGhyZWFkIDYyMzcgKHRpZCAyIFZnVHNfV2FpdFN5cykgIDB4MDAxZjI4MzIgaW4gX2RsX3N5c2luZm9faW50ODAgKCkgZnJvbSAvbGliL2xkLWxpbnV4LnNvLjIKICAxIFRocmVhZCA2MjM0ICh0aWQgMSBWZ1RzX1lpZWxkaW5nKSAgbWFpbiAoYXJnYz0xLCBhcmd2PTB4YmVkY2MyNzQpIGF0IHByb2cuYzoxMDUKKGdkYikgCjwvcHJlPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1zaGFkb3dyZWdpc3RlcnMiPjwvYT4zLjIuNy6gRXhhbWluaW5nIGFuZCBtb2RpZnlpbmcgVmFsZ3JpbmQgc2hhZG93IHJlZ2lzdGVyczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+CjxwPiBXaGVuIHRoZSBvcHRpb24gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiLXNoYWRvdy1yZWdpc3RlcnM9eWVzPC9jb2RlPiBpcwpnaXZlbiwgdGhlIFZhbGdyaW5kIGdkYnNlcnZlciB3aWxsIGxldCBHREIgZXhhbWluZSBhbmQvb3IgbW9kaWZ5ClZhbGdyaW5kJ3Mgc2hhZG93IHJlZ2lzdGVycy4gIEdEQiB2ZXJzaW9uIDcuMSBvciBsYXRlciBpcyBuZWVkZWQgZm9yIHRoaXMKdG8gd29yay4gRm9yIHg4NiBhbmQgYW1kNjQsIEdEQiB2ZXJzaW9uIDcuMiBvciBsYXRlciBpcyBuZWVkZWQuPC9wPgo8cD5Gb3IgZWFjaCBDUFUgcmVnaXN0ZXIsIHRoZSBWYWxncmluZCBjb3JlIG1haW50YWlucyB0d28Kc2hhZG93IHJlZ2lzdGVyIHNldHMuICBUaGVzZSBzaGFkb3cgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCBmcm9tCkdEQiBieSBnaXZpbmcgYSBwb3N0Zml4IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+czE8L2NvZGU+Cm9yIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+czI8L2NvZGU+IGZvciByZXNwZWN0aXZlbHkgdGhlIGZpcnN0CmFuZCBzZWNvbmQgc2hhZG93IHJlZ2lzdGVyLiAgRm9yIGV4YW1wbGUsIHRoZSB4ODYgcmVnaXN0ZXIKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5lYXg8L2NvZGU+IGFuZCBpdHMgdHdvIHNoYWRvd3MKY2FuIGJlIGV4YW1pbmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6PC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CihnZGIpIHAgJGVheAokMSA9IDAKKGdkYikgcCAkZWF4czEKJDIgPSAwCihnZGIpIHAgJGVheHMyCiQzID0gMAooZ2RiKSAKPC9wcmU+CjxwPkZsb2F0IHNoYWRvdyByZWdpc3RlcnMgYXJlIHNob3duIGJ5IEdEQiBhcyB1bnNpZ25lZCBpbnRlZ2VyCnZhbHVlcyBpbnN0ZWFkIG9mIGZsb2F0IHZhbHVlcywgYXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGVzZQpzaGFkb3cgdmFsdWVzIGFyZSBtb3N0bHkgdXNlZCBmb3IgbWVtY2hlY2sgdmFsaWRpdHkgYml0cy4gPC9wPgo8cD5JbnRlbC9hbWQ2NCBBVlggcmVnaXN0ZXJzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+eW1tMDwvY29kZT4KdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij55bW0xNTwvY29kZT4gaGF2ZSBhbHNvIHRoZWlyIHNoYWRvdwpyZWdpc3RlcnMuIEhvd2V2ZXIsIEdEQiBwcmVzZW50cyB0aGUgc2hhZG93IHZhbHVlcyB1c2luZyB0d28KImhhbGYiIHJlZ2lzdGVycy4gRm9yIGV4YW1wbGUsIHRoZSBoYWxmIHNoYWRvdyByZWdpc3RlcnMgZm9yIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnltbTk8L2NvZGU+IGFyZQo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnhtbTlzMTwvY29kZT4gKGxvd2VyIGhhbGYgZm9yIHNldCAxKSwKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij55bW05aHMxPC9jb2RlPiAodXBwZXIgaGFsZiBmb3Igc2V0IDEpLAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnhtbTlzMjwvY29kZT4gKGxvd2VyIGhhbGYgZm9yIHNldCAyKSwKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij55bW05aHMyPC9jb2RlPiAodXBwZXIgaGFsZiBmb3Igc2V0IDIpLgpOb3RlIHRoZSBpbmNvbnNpc3RlbnQgbm90YXRpb24gZm9yIHRoZSBuYW1lcyBvZiB0aGUgaGFsZiByZWdpc3RlcnM6CnRoZSBsb3dlciBwYXJ0IHN0YXJ0cyB3aXRoIGFuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+eDwvY29kZT4sCnRoZSB1cHBlciBwYXJ0IHN0YXJ0cyB3aXRoIGFuIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+eTwvY29kZT4KYW5kIGhhcyBhbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmg8L2NvZGU+IGJlZm9yZSB0aGUgc2hhZG93IHBvc3RmaXguCjwvcD4KPHA+VGhlIHNwZWNpYWwgcHJlc2VudGF0aW9uIG9mIHRoZSBBVlggc2hhZG93IHJlZ2lzdGVycyBpcyBkdWUgdG8KdGhlIGZhY3QgdGhhdCBHREIgaW5kZXBlbmRlbnRseSByZXRyaWV2ZXMgdGhlIGxvd2VyIGFuZCB1cHBlciBoYWxmIG9mCnRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnltbTwvY29kZT4gcmVnaXN0ZXJzLiAgR0RCIGRvZXMgbm90Cmhvd2V2ZXIga25vdyB0aGF0IHRoZSBzaGFkb3cgaGFsZiByZWdpc3RlcnMgaGF2ZSB0byBiZSBzaG93biBjb21iaW5lZC4KPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1saW1pdGF0aW9ucyI+PC9hPjMuMi44LqBMaW1pdGF0aW9ucyBvZiB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+RGVidWdnaW5nIHdpdGggdGhlIFZhbGdyaW5kIGdkYnNlcnZlciBpcyB2ZXJ5IHNpbWlsYXIgdG8gbmF0aXZlCmRlYnVnZ2luZy4gIFZhbGdyaW5kJ3MgZ2Ric2VydmVyIGltcGxlbWVudGF0aW9uIGlzIHF1aXRlCmNvbXBsZXRlLCBhbmQgc28gcHJvdmlkZXMgbW9zdCBvZiB0aGUgR0RCIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LiAgVGhlcmUKYXJlIGhvd2V2ZXIgc29tZSBsaW1pdGF0aW9ucyBhbmQgcGVjdWxpYXJpdGllczo8L3A+CjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5QcmVjaXNpb24gb2YgInN0b3AtYXQiIGNvbW1hbmRzLjwvcD4KPHA+CiAgICAgICBHREIgY29tbWFuZHMgc3VjaCBhcyAic3RlcCIsICJuZXh0IiwgInN0ZXBpIiwgYnJlYWtwb2ludHMKICAgICAgIGFuZCB3YXRjaHBvaW50cywgd2lsbCBzdG9wIHRoZSBleGVjdXRpb24gb2YgdGhlIHByb2Nlc3MuICBXaXRoCiAgICAgICB0aGUgb3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYj15ZXM8L2NvZGU+LCB0aGUgcHJvY2VzcyBtaWdodCBub3QKICAgICAgIHN0b3AgYXQgdGhlIGV4YWN0IHJlcXVlc3RlZCBpbnN0cnVjdGlvbi4gSW5zdGVhZCwgaXQgbWlnaHQKICAgICAgIGNvbnRpbnVlIGV4ZWN1dGlvbiBvZiB0aGUgY3VycmVudCBiYXNpYyBibG9jayBhbmQgc3RvcCBhdCBvbmUKICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgYmFzaWMgYmxvY2tzLiBUaGlzIGlzIGxpbmtlZCB0byB0aGUgZmFjdCB0aGF0CiAgICAgICBWYWxncmluZCBnZGJzZXJ2ZXIgaGFzIHRvIGluc3RydW1lbnQgYSBibG9jayB0byBhbGxvdyBzdG9wcGluZwogICAgICAgYXQgdGhlIGV4YWN0IGluc3RydWN0aW9uIHJlcXVlc3RlZC4gIEN1cnJlbnRseSwKICAgICAgIHJlLWluc3RydW1lbnRhdGlvbiBvZiB0aGUgYmxvY2sgY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkIGlzIG5vdAogICAgICAgc3VwcG9ydGVkLiBTbywgaWYgdGhlIGFjdGlvbiByZXF1ZXN0ZWQgYnkgR0RCIChlLmcuIHNpbmdsZQogICAgICAgc3RlcHBpbmcgb3IgaW5zZXJ0aW5nIGEgYnJlYWtwb2ludCkgaW1wbGllcyByZS1pbnN0cnVtZW50YXRpb24KICAgICAgIG9mIHRoZSBjdXJyZW50IGJsb2NrLCB0aGUgR0RCIGFjdGlvbiBtYXkgbm90IGJlIGV4ZWN1dGVkCiAgICAgICBwcmVjaXNlbHkuCiAgICAgPC9wPgo8cD4KICAgICAgIFRoaXMgbGltaXRhdGlvbiBhcHBsaWVzIHdoZW4gdGhlIGJhc2ljIGJsb2NrCiAgICAgICBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgaGFzIG5vdCB5ZXQgYmVlbiBpbnN0cnVtZW50ZWQgZm9yIGRlYnVnZ2luZy4KICAgICAgIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiB0aGUgZ2Ric2VydmVyIGlzIGFjdGl2YXRlZCBkdWUgdG8gdGhlCiAgICAgICB0b29sIHJlcG9ydGluZyBhbiBlcnJvciBvciB0byBhIHdhdGNocG9pbnQuICBJZiB0aGUgZ2Ric2VydmVyCiAgICAgICBibG9jayBoYXMgYmVlbiBhY3RpdmF0ZWQgZm9sbG93aW5nIGEgYnJlYWtwb2ludCwgb3IgaWYgYQogICAgICAgYnJlYWtwb2ludCBoYXMgYmVlbiBpbnNlcnRlZCBpbiB0aGUgYmxvY2sgYmVmb3JlIGl0cyBleGVjdXRpb24sCiAgICAgICB0aGVuIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIGluc3RydW1lbnRlZCBmb3IgZGVidWdnaW5nLgogICAgIDwvcD4KPHA+CiAgICAgICBJZiB5b3UgdXNlIHRoZSBvcHRpb24gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiPWZ1bGw8L2NvZGU+LCB0aGVuIEdEQgogICAgICAgInN0b3AtYXQiIGNvbW1hbmRzIHdpbGwgYmUgb2JleWVkIHByZWNpc2VseS4gIFRoZQogICAgICAgZG93bnNpZGUgaXMgdGhhdCB0aGlzIHJlcXVpcmVzIGVhY2ggaW5zdHJ1Y3Rpb24gdG8gYmUKICAgICAgIGluc3RydW1lbnRlZCB3aXRoIGFuIGFkZGl0aW9uYWwgY2FsbCB0byBhIGdkYnNlcnZlciBoZWxwZXIKICAgICAgIGZ1bmN0aW9uLCB3aGljaCBnaXZlcyBjb25zaWRlcmFibGUgb3ZlcmhlYWQgKCs1MDAlIGZvciBtZW1jaGVjaykKICAgICAgIGNvbXBhcmVkIHRvICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGI9bm88L2NvZGU+LgogICAgICAgT3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYj15ZXM8L2NvZGU+IGhhcyBuZWdsZWN0aWJsZSBvdmVyaGVhZCBjb21wYXJlZAogICAgICAgdG8gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiPW5vPC9jb2RlPi4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5Qcm9jZXNzb3IgcmVnaXN0ZXJzIGFuZCBmbGFncyB2YWx1ZXMuPC9wPgo8cD5XaGVuIFZhbGdyaW5kIGdkYnNlcnZlciBzdG9wcyBvbiBhbiBlcnJvciwgb24gYSBicmVha3BvaW50CiAgICAgb3Igd2hlbiBzaW5nbGUgc3RlcHBpbmcsIHJlZ2lzdGVycyBhbmQgZmxhZ3MgdmFsdWVzIG1pZ2h0IG5vdCBiZSBhbHdheXMKICAgICB1cCB0byBkYXRlIGR1ZSB0byB0aGUgb3B0aW1pc2F0aW9ucyBkb25lIGJ5IHRoZSBWYWxncmluZCBjb3JlLgogICAgIFRoZSBkZWZhdWx0IHZhbHVlIAogICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmV4LWlyb3B0LXJlZ2lzdGVyLXVwZGF0ZXM9dW53aW5kcmVncy1hdC1tZW0tYWNjZXNzPC9jb2RlPgogICAgIGVuc3VyZXMgdGhhdCB0aGUgcmVnaXN0ZXJzIG5lZWRlZCB0byBtYWtlIGEgc3RhY2sgdHJhY2UgKHR5cGljYWxseQogICAgIFBDL1NQL0ZQKSBhcmUgdXAgdG8gZGF0ZSBhdCBlYWNoIG1lbW9yeSBhY2Nlc3MgKGkuZS4gbWVtb3J5IGV4Y2VwdGlvbgogICAgIHBvaW50cykuCiAgICAgRGlzYWJsaW5nIHNvbWUgb3B0aW1pc2F0aW9ucyB1c2luZyB0aGUgZm9sbG93aW5nIHZhbHVlcyB3aWxsIGluY3JlYXNlCiAgICAgdGhlIHByZWNpc2lvbiBvZiByZWdpc3RlcnMgYW5kIGZsYWdzIHZhbHVlcyAoYSB0eXBpY2FsIHBlcmZvcm1hbmNlIAogICAgIGltcGFjdCBmb3IgbWVtY2hlY2sgaXMgZ2l2ZW4gZm9yIGVhY2ggb3B0aW9uKS4KICAgICAgIDwvcD4KPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlOyAiPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXgtaXJvcHQtcmVnaXN0ZXItdXBkYXRlcz1hbGxyZWdzLWF0LW1lbS1hY2Nlc3M8L2NvZGU+ICgrMTAlKQogICAgICAgICAgIGVuc3VyZXMgdGhhdCBhbGwgcmVnaXN0ZXJzIGFuZCBmbGFncyBhcmUgdXAgdG8gZGF0ZSBhdCBlYWNoIG1lbW9yeQogICAgICAgICAgIGFjY2Vzcy4KICAgICAgICAgPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmV4LWlyb3B0LXJlZ2lzdGVyLXVwZGF0ZXM9YWxscmVncy1hdC1lYWNoLWluc248L2NvZGU+ICgrMjUlKQogICAgICAgICAgIGVuc3VyZXMgdGhhdCBhbGwgcmVnaXN0ZXJzIGFuZCBmbGFncyBhcmUgdXAgdG8gZGF0ZSBhdCBlYWNoIGluc3RydWN0aW9uLgogICAgICAgICA8L2xpPgo8L3VsPjwvZGl2Pgo8cD4KICAgICAgIE5vdGUgdGhhdCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGI9ZnVsbDwvY29kZT4gKCs1MDAlLCBzZWUgYWJvdmUKICAgICAgIFByZWNpc2lvbiBvZiAic3RvcC1hdCIgY29tbWFuZHMpIGF1dG9tYXRpY2FsbHkKICAgICAgIGFjdGl2YXRlcyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZleC1pcm9wdC1yZWdpc3Rlci11cGRhdGVzPWFsbHJlZ3MtYXQtZWFjaC1pbnNuPC9jb2RlPi4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5IYXJkd2FyZSB3YXRjaHBvaW50IHN1cHBvcnQgYnkgdGhlIFZhbGdyaW5kCiAgICAgZ2Ric2VydmVyLjwvcD4KPHA+IFRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgY2FuIHNpbXVsYXRlIGhhcmR3YXJlIHdhdGNocG9pbnRzCiAgICAgaWYgdGhlIHNlbGVjdGVkIHRvb2wgcHJvdmlkZXMgc3VwcG9ydCBmb3IgaXQuICBDdXJyZW50bHksCiAgICAgb25seSBNZW1jaGVjayBwcm92aWRlcyBoYXJkd2FyZSB3YXRjaHBvaW50IHNpbXVsYXRpb24uICBUaGUKICAgICBoYXJkd2FyZSB3YXRjaHBvaW50IHNpbXVsYXRpb24gcHJvdmlkZWQgYnkgTWVtY2hlY2sgaXMgbXVjaAogICAgIGZhc3RlciB0aGF0IEdEQiBzb2Z0d2FyZSB3YXRjaHBvaW50cywgd2hpY2ggYXJlIGltcGxlbWVudGVkIGJ5CiAgICAgR0RCIGNoZWNraW5nIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlZCB6b25lKHMpIGFmdGVyIGVhY2gKICAgICBpbnN0cnVjdGlvbi4gIEhhcmR3YXJlIHdhdGNocG9pbnQgc2ltdWxhdGlvbiBhbHNvIHByb3ZpZGVzIHJlYWQKICAgICB3YXRjaHBvaW50cy4gIFRoZSBoYXJkd2FyZSB3YXRjaHBvaW50IHNpbXVsYXRpb24gYnkgTWVtY2hlY2sgaGFzCiAgICAgc29tZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byByZWFsIGhhcmR3YXJlCiAgICAgd2F0Y2hwb2ludHMuIEhvd2V2ZXIsIHRoZSBudW1iZXIgYW5kIGxlbmd0aCBvZiBzaW11bGF0ZWQKICAgICB3YXRjaHBvaW50cyBhcmUgbm90IGxpbWl0ZWQuCiAgICAgPC9wPgo8cD5UeXBpY2FsbHksIHRoZSBudW1iZXIgb2YgKHJlYWwpIGhhcmR3YXJlIHdhdGNocG9pbnRzIGlzCiAgICAgbGltaXRlZC4gIEZvciBleGFtcGxlLCB0aGUgeDg2IGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBhIG1heGltdW0gb2YKICAgICA0IGhhcmR3YXJlIHdhdGNocG9pbnRzLCBlYWNoIHdhdGNocG9pbnQgd2F0Y2hpbmcgMSwgMiwgNCBvciA4CiAgICAgYnl0ZXMuIFRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhbnkgbGltaXRhdGlvbiBvbiB0aGUKICAgICBudW1iZXIgb2Ygc2ltdWxhdGVkIGhhcmR3YXJlIHdhdGNocG9pbnRzLiBJdCBhbHNvIGhhcyBubwogICAgIGxpbWl0YXRpb24gb24gdGhlIGxlbmd0aCBvZiB0aGUgbWVtb3J5IHpvbmUgYmVpbmcKICAgICB3YXRjaGVkLiAgVXNpbmcgR0RCIHZlcnNpb24gNy40IG9yIGxhdGVyIGFsbG93IGZ1bGwgdXNlIG9mIHRoZQogICAgIGZsZXhpYmlsaXR5IG9mIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIncyBzaW11bGF0ZWQgaGFyZHdhcmUgd2F0Y2hwb2ludHMuCiAgICAgUHJldmlvdXMgR0RCIHZlcnNpb25zIGRvIG5vdCB1bmRlcnN0YW5kIHRoYXQgVmFsZ3JpbmQgZ2Ric2VydmVyCiAgICAgd2F0Y2hwb2ludHMgaGF2ZSBubyBsZW5ndGggbGltaXQuCiAgICAgPC9wPgo8cD5NZW1jaGVjayBpbXBsZW1lbnRzIGhhcmR3YXJlIHdhdGNocG9pbnQgc2ltdWxhdGlvbiBieQogICAgIG1hcmtpbmcgdGhlIHdhdGNoZWQgYWRkcmVzcyByYW5nZXMgYXMgYmVpbmcgdW5hZGRyZXNzYWJsZS4gIFdoZW4KICAgICBhIGhhcmR3YXJlIHdhdGNocG9pbnQgaXMgcmVtb3ZlZCwgdGhlIHJhbmdlIGlzIG1hcmtlZCBhcwogICAgIGFkZHJlc3NhYmxlIGFuZCBkZWZpbmVkLiAgSGFyZHdhcmUgd2F0Y2hwb2ludCBzaW11bGF0aW9uIG9mCiAgICAgYWRkcmVzc2FibGUtYnV0LXVuZGVmaW5lZCBtZW1vcnkgem9uZXMgd29ya3MgcHJvcGVybHksIGJ1dCBoYXMKICAgICB0aGUgdW5kZXNpcmFibGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyB0aGUgem9uZSBhcyBkZWZpbmVkIHdoZW4KICAgICB0aGUgd2F0Y2hwb2ludCBpcyByZW1vdmVkLgogICAgIDwvcD4KPHA+V3JpdGUgd2F0Y2hwb2ludHMgbWlnaHQgbm90IGJlIHJlcG9ydGVkIGF0IHRoZSAKICAgICBleGFjdCBpbnN0cnVjdGlvbiB0aGF0IHdyaXRlcyB0aGUgbW9uaXRvcmVkIGFyZWEsCiAgICAgdW5sZXNzIG9wdGlvbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGI9ZnVsbDwvY29kZT4gaXMgZ2l2ZW4uICBSZWFkIHdhdGNocG9pbnRzCiAgICAgd2lsbCBhbHdheXMgYmUgcmVwb3J0ZWQgYXQgdGhlIGV4YWN0IGluc3RydWN0aW9uIHJlYWRpbmcgdGhlCiAgICAgd2F0Y2hlZCBtZW1vcnkuCiAgICAgPC9wPgo8cD5JdCBpcyBiZXR0ZXIgdG8gYXZvaWQgdXNpbmcgaGFyZHdhcmUgd2F0Y2hwb2ludCBvZiBub3QKICAgICBhZGRyZXNzYWJsZSAoeWV0KSBtZW1vcnk6IGluIHN1Y2ggYSBjYXNlLCBHREIgd2lsbCBmYWxsIGJhY2sgdG8KICAgICBleHRyZW1lbHkgc2xvdyBzb2Z0d2FyZSB3YXRjaHBvaW50cy4gIEFsc28sIGlmIHlvdSBkbyBub3QgcXVpdCBHREIKICAgICBiZXR3ZWVuIHR3byBkZWJ1Z2dpbmcgc2Vzc2lvbnMsIHRoZSBoYXJkd2FyZSB3YXRjaHBvaW50cyBvZiB0aGUKICAgICBwcmV2aW91cyBzZXNzaW9ucyB3aWxsIGJlIHJlLWluc2VydGVkIGFzIHNvZnR3YXJlIHdhdGNocG9pbnRzIGlmCiAgICAgdGhlIHdhdGNoZWQgbWVtb3J5IHpvbmUgaXMgbm90IGFkZHJlc3NhYmxlIGF0IHByb2dyYW0gc3RhcnR1cC4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5TdGVwcGluZyBpbnNpZGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBUk0uPC9wPgo8cD5Gb3IgdW5rbm93biByZWFzb25zLCBzdGVwcGluZyBpbnNpZGUgc2hhcmVkCiAgICAgbGlicmFyaWVzIG9uIEFSTSBtYXkgZmFpbC4gIEEgd29ya2Fyb3VuZCBpcyB0byB1c2UgdGhlCiAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sZGQ8L2NvZGU+IGNvbW1hbmQKICAgICB0byBmaW5kIHRoZSBsaXN0IG9mIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHRoZWlyIGxvYWRpbmcgYWRkcmVzcwogICAgIGFuZCBpbmZvcm0gR0RCIG9mIHRoZSBsb2FkaW5nIGFkZHJlc3MgdXNpbmcgdGhlIEdEQiBjb21tYW5kCiAgICAgImFkZC1zeW1ib2wtZmlsZSIuIEV4YW1wbGU6CiAgICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CihnZGIpIHNoZWxsIGxkZCAuL3Byb2cKCWxpYmMuc28uNiA9Jmd0OyAvbGliL2xpYmMuc28uNiAoMHg0MDAyYzAwMCkKCS9saWIvbGQtbGludXguc28uMyAoMHg0MDAwMDAwMCkKKGdkYikgYWRkLXN5bWJvbC1maWxlIC9saWIvbGliYy5zby42IDB4NDAwMmMwMDAKYWRkIHN5bWJvbCB0YWJsZSBmcm9tIGZpbGUgIi9saWIvbGliYy5zby42IiBhdAoJLnRleHRfYWRkciA9IDB4NDAwMmMwMDAKKHkgb3IgbikgeQpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xpYmMuc28uNi4uLihubyBkZWJ1Z2dpbmcgc3ltYm9scyBmb3VuZCkuLi5kb25lLgooZ2RiKSAKPC9wcmU+CjxwPgogICAgIDwvcD4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPkdEQiB2ZXJzaW9uIG5lZWRlZCBmb3IgQVJNIGFuZCBQUEMzMi82NC48L3A+CjxwPllvdSBtdXN0IHVzZSBhIEdEQiB2ZXJzaW9uIHdoaWNoIGlzIGFibGUgdG8gcmVhZCBYTUwKICAgICB0YXJnZXQgZGVzY3JpcHRpb24gc2VudCBieSBhIGdkYnNlcnZlci4gIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHNldHVwCiAgICAgaWYgR0RCIHdhcyBjb25maWd1cmVkIGFuZCBidWlsdCB3aXRoIHRoZSAiZXhwYXQiCiAgICAgbGlicmFyeS4gIElmIHlvdXIgR0RCIHdhcyBub3QgY29uZmlndXJlZCB3aXRoIFhNTCBzdXBwb3J0LCBpdAogICAgIHdpbGwgcmVwb3J0IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB1c2luZyB0aGUgInRhcmdldCIKICAgICBjb21tYW5kLiAgRGVidWdnaW5nIHdpbGwgbm90IHdvcmsgYmVjYXVzZSBHREIgd2lsbCB0aGVuIG5vdCBiZQogICAgIGFibGUgdG8gZmV0Y2ggdGhlIHJlZ2lzdGVycyBmcm9tIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIuCiAgICAgRm9yIEFSTSBwcm9ncmFtcyB1c2luZyB0aGUgVGh1bWIgaW5zdHJ1Y3Rpb24gc2V0LCB5b3UgbXVzdCB1c2UKICAgICBhIEdEQiB2ZXJzaW9uIG9mIDcuMSBvciBsYXRlciwgYXMgZWFybGllciB2ZXJzaW9ucyBoYXZlIHByb2JsZW1zCiAgICAgd2l0aCBuZXh0L3N0ZXAvYnJlYWtwb2ludHMgaW4gVGh1bWIgY29kZS4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5TdGFjayB1bndpbmRpbmcgb24gUFBDMzIvUFBDNjQuIDwvcD4KPHA+T24gUFBDMzIvUFBDNjQsIHN0YWNrIHVud2luZGluZyBmb3IgbGVhZiBmdW5jdGlvbnMKICAgICAoZnVuY3Rpb25zIHRoYXQgZG8gbm90IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucykgd29ya3MgcHJvcGVybHkKICAgICBvbmx5IHdoZW4geW91IGdpdmUgdGhlIG9wdGlvbgogICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmV4LWlyb3B0LXJlZ2lzdGVyLXVwZGF0ZXM9YWxscmVncy1hdC1tZW0tYWNjZXNzPC9jb2RlPgogICAgIG9yIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmV4LWlyb3B0LXJlZ2lzdGVyLXVwZGF0ZXM9YWxscmVncy1hdC1lYWNoLWluc248L2NvZGU+LgogICAgIFlvdSBtdXN0IGFsc28gcGFzcyB0aGlzIG9wdGlvbiBpbiBvcmRlciB0byBnZXQgYSBwcmVjaXNlIHN0YWNrIHdoZW4KICAgICBhIHNpZ25hbCBpcyB0cmFwcGVkIGJ5IEdEQi4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5CcmVha3BvaW50cyBlbmNvdW50ZXJlZCBtdWx0aXBsZSB0aW1lcy48L3A+CjxwPlNvbWUgaW5zdHJ1Y3Rpb25zIChlLmcuIHg4NiAicmVwIG1vdnNiIikKICAgICBhcmUgdHJhbnNsYXRlZCBieSBWYWxncmluZCB1c2luZyBhIGxvb3AuICBJZiBhIGJyZWFrcG9pbnQgaXMgcGxhY2VkCiAgICAgb24gc3VjaCBhbiBpbnN0cnVjdGlvbiwgdGhlIGJyZWFrcG9pbnQgd2lsbCBiZSBlbmNvdW50ZXJlZAogICAgIG11bHRpcGxlIHRpbWVzIC0tIG9uY2UgZm9yIGVhY2ggc3RlcCBvZiB0aGUgImltcGxpY2l0IiBsb29wCiAgICAgaW1wbGVtZW50aW5nIHRoZSBpbnN0cnVjdGlvbi4KICAgICA8L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgo8cD5FeGVjdXRpb24gb2YgSW5mZXJpb3IgZnVuY3Rpb24gY2FsbHMgYnkgdGhlIFZhbGdyaW5kCiAgICAgZ2Ric2VydmVyLjwvcD4KPHA+R0RCIGFsbG93cyB0aGUgdXNlciB0byAiY2FsbCIgZnVuY3Rpb25zIGluc2lkZSB0aGUgcHJvY2VzcwogICAgIGJlaW5nIGRlYnVnZ2VkLiAgU3VjaCBjYWxscyBhcmUgbmFtZWQgImluZmVyaW9yIGNhbGxzIiBpbiB0aGUgR0RCCiAgICAgdGVybWlub2xvZ3kuICBBIHR5cGljYWwgdXNlIG9mIGFuIGluZmVyaW9yIGNhbGwgaXMgdG8gZXhlY3V0ZQogICAgIGEgZnVuY3Rpb24gdGhhdCBwcmludHMgYSBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mIGEgY29tcGxleCBkYXRhCiAgICAgc3RydWN0dXJlLiAgVG8gbWFrZSBhbiBpbmZlcmlvciBjYWxsLCB1c2UgdGhlIEdEQiAicHJpbnQiIGNvbW1hbmQKICAgICBmb2xsb3dlZCBieSB0aGUgZnVuY3Rpb24gdG8gY2FsbCBhbmQgaXRzIGFyZ3VtZW50cy4gIEFzIGFuCiAgICAgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBHREIgY29tbWFuZCBjYXVzZXMgYW4gaW5mZXJpb3IgY2FsbCB0byB0aGUKICAgICBsaWJjICJwcmludGYiIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBwcm9jZXNzCiAgICAgYmVpbmcgZGVidWdnZWQ6CiAgICAgPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CihnZGIpIHAgcHJpbnRmKCJwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkIGhhcyBwaWQgJWRcbiIsIGdldHBpZCgpKQokNSA9IDM2CihnZGIpIAo8L3ByZT4KPHA+VGhlIFZhbGdyaW5kIGdkYnNlcnZlciBzdXBwb3J0cyBpbmZlcmlvciBmdW5jdGlvbiBjYWxscy4KICAgICBXaGlsc3QgYW4gaW5mZXJpb3IgY2FsbCBpcyBydW5uaW5nLCB0aGUgVmFsZ3JpbmQgdG9vbCB3aWxsIHJlcG9ydAogICAgIGVycm9ycyBhcyB1c3VhbC4gIElmIHlvdSBkbyBub3Qgd2FudCB0byBoYXZlIHN1Y2ggZXJyb3JzIHN0b3AgdGhlCiAgICAgZXhlY3V0aW9uIG9mIHRoZSBpbmZlcmlvciBjYWxsLCB5b3UgY2FuCiAgICAgdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+di5zZXQgdmdkYi1lcnJvcjwvY29kZT4gdG8gc2V0IGEKICAgICBiaWcgdmFsdWUgYmVmb3JlIHRoZSBjYWxsLCB0aGVuIG1hbnVhbGx5IHJlc2V0IGl0IHRvIGl0cyBvcmlnaW5hbAogICAgIHZhbHVlIHdoZW4gdGhlIGNhbGwgaXMgY29tcGxldGUuPC9wPgo8cD5UbyBleGVjdXRlIGluZmVyaW9yIGNhbGxzLCBHREIgY2hhbmdlcyByZWdpc3RlcnMgc3VjaCBhcwogICAgIHRoZSBwcm9ncmFtIGNvdW50ZXIsIGFuZCB0aGVuIGNvbnRpbnVlcyB0aGUgZXhlY3V0aW9uIG9mIHRoZQogICAgIHByb2dyYW0uIEluIGEgbXVsdGl0aHJlYWRlZCBwcm9ncmFtLCBhbGwgdGhyZWFkcyBhcmUgY29udGludWVkLAogICAgIG5vdCBqdXN0IHRoZSB0aHJlYWQgaW5zdHJ1Y3RlZCB0byBtYWtlIHRoZSBpbmZlcmlvciBjYWxsLiAgSWYKICAgICBhbm90aGVyIHRocmVhZCByZXBvcnRzIGFuIGVycm9yIG9yIGVuY291bnRlcnMgYSBicmVha3BvaW50LCB0aGUKICAgICBldmFsdWF0aW9uIG9mIHRoZSBpbmZlcmlvciBjYWxsIGlzIGFiYW5kb25lZC48L3A+CjxwPk5vdGUgdGhhdCBpbmZlcmlvciBmdW5jdGlvbiBjYWxscyBhcmUgYSBwb3dlcmZ1bCBHREIKICAgICBmZWF0dXJlLCBidXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiBGb3IgZXhhbXBsZSwgaWYKICAgICB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBpcyBzdG9wcGVkIGluc2lkZSB0aGUgZnVuY3Rpb24gInByaW50ZiIsCiAgICAgZm9yY2luZyBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHByaW50ZiB2aWEgYW4gaW5mZXJpb3IgY2FsbCB3aWxsCiAgICAgdmVyeSBwcm9iYWJseSBjcmVhdGUgcHJvYmxlbXMuICBUaGUgVmFsZ3JpbmQgdG9vbCBtaWdodCBhbHNvIGFkZAogICAgIGFub3RoZXIgbGV2ZWwgb2YgY29tcGxleGl0eSB0byBpbmZlcmlvciBjYWxscywgZS5nLiBieSByZXBvcnRpbmcKICAgICB0b29sIGVycm9ycyBkdXJpbmcgdGhlIEluZmVyaW9yIGNhbGwgb3IgZHVlIHRvIHRoZQogICAgIGluc3RydW1lbnRhdGlvbiBkb25lLgogICAgIDwvcD4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPkNvbm5lY3RpbmcgdG8gb3IgaW50ZXJydXB0aW5nIGEgVmFsZ3JpbmQgcHJvY2VzcyBibG9ja2VkIGluCiAgICAgYSBzeXN0ZW0gY2FsbC48L3A+CjxwPkNvbm5lY3RpbmcgdG8gb3IgaW50ZXJydXB0aW5nIGEgVmFsZ3JpbmQgcHJvY2VzcyBibG9ja2VkIGluCiAgICAgYSBzeXN0ZW0gY2FsbCByZXF1aXJlcyB0aGUgInB0cmFjZSIgc3lzdGVtIGNhbGwgdG8gYmUgdXNhYmxlLgogICAgIFRoaXMgbWF5IGJlIGRpc2FibGVkIGluIHlvdXIga2VybmVsIGZvciBzZWN1cml0eSByZWFzb25zLgogICAgIDwvcD4KPHA+V2hlbiBydW5uaW5nIHlvdXIgcHJvZ3JhbSwgVmFsZ3JpbmQncyBzY2hlZHVsZXIKICAgICBwZXJpb2RpY2FsbHkgY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYW55IHdvcmsgdG8gYmUgaGFuZGxlZCBieQogICAgIHRoZSBnZGJzZXJ2ZXIuICBVbmZvcnR1bmF0ZWx5IHRoaXMgY2hlY2sgaXMgb25seSBkb25lIGlmIGF0IGxlYXN0CiAgICAgb25lIHRocmVhZCBvZiB0aGUgcHJvY2VzcyBpcyBydW5uYWJsZS4gIElmIGFsbCB0aGUgdGhyZWFkcyBvZiB0aGUKICAgICBwcm9jZXNzIGFyZSBibG9ja2VkIGluIGEgc3lzdGVtIGNhbGwsIHRoZW4gdGhlIGNoZWNrcyBkbyBub3QKICAgICBoYXBwZW4sIGFuZCB0aGUgVmFsZ3JpbmQgc2NoZWR1bGVyIHdpbGwgbm90IGludm9rZSB0aGUgZ2Ric2VydmVyLgogICAgIEluIHN1Y2ggYSBjYXNlLCB0aGUgdmdkYiByZWxheSBhcHBsaWNhdGlvbiB3aWxsICJmb3JjZSIgdGhlCiAgICAgZ2Ric2VydmVyIHRvIGJlIGludm9rZWQsIHdpdGhvdXQgdGhlIGludGVydmVudGlvbiBvZiB0aGUgVmFsZ3JpbmQKICAgICBzY2hlZHVsZXIuCiAgICAgPC9wPgo8cD5TdWNoIGZvcmNlZCBpbnZvY2F0aW9uIG9mIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgaXMKICAgICBpbXBsZW1lbnRlZCBieSB2Z2RiIHVzaW5nIHB0cmFjZSBzeXN0ZW0gY2FsbHMuICBPbiBhIHByb3Blcmx5CiAgICAgaW1wbGVtZW50ZWQga2VybmVsLCB0aGUgcHRyYWNlIGNhbGxzIGRvbmUgYnkgdmdkYiB3aWxsIG5vdAogICAgIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSBwcm9ncmFtIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQuCiAgICAgSWYgaG93ZXZlciB0aGV5IGRvLCBnaXZpbmcgdGhlCiAgICAgb3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWF4LWludm9rZS1tcz0wPC9jb2RlPiB0byB0aGUgdmdkYiByZWxheQogICAgIGFwcGxpY2F0aW9uIHdpbGwgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgcHRyYWNlIGNhbGxzLiAgVGhlCiAgICAgY29uc2VxdWVuY2Ugb2YgZGlzYWJsaW5nIHB0cmFjZSB1c2FnZSBpbiB2Z2RiIGlzIHRoYXQgYSBWYWxncmluZAogICAgIHByb2Nlc3MgYmxvY2tlZCBpbiBhIHN5c3RlbSBjYWxsIGNhbm5vdCBiZSB3b2tlbiB1cCBvcgogICAgIGludGVycnVwdGVkIGZyb20gR0RCIHVudGlsIGl0IGV4ZWN1dGVzIGVub3VnaCBiYXNpYyBibG9ja3MgdG8gbGV0CiAgICAgdGhlIFZhbGdyaW5kIHNjaGVkdWxlcidzIG5vcm1hbCBjaGVja2luZyB0YWtlIGVmZmVjdC4KICAgICA8L3A+CjxwPldoZW4gcHRyYWNlIGlzIGRpc2FibGVkIGluIHZnZGIsIHlvdSBjYW4gaW5jcmVhc2UgdGhlCiAgICAgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIFZhbGdyaW5kIGdkYnNlcnZlciB0byBjb21tYW5kcyBvcgogICAgIGludGVycnVwdHMgYnkgZ2l2aW5nIGEgbG93ZXIgdmFsdWUgdG8gdGhlCiAgICAgb3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYi1wb2xsPC9jb2RlPi4gIElmIHlvdXIgYXBwbGljYXRpb24gaXMKICAgICBibG9ja2VkIGluIHN5c3RlbSBjYWxscyBtb3N0IG9mIHRoZSB0aW1lLCB1c2luZyBhIHZlcnkgbG93IHZhbHVlCiAgICAgZm9yIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYi1wb2xsPC9jb2RlPiB3aWxsIGNhdXNlIGEgdGhlIGdkYnNlcnZlciB0byBiZQogICAgIGludm9rZWQgc29vbmVyLiAgVGhlIGdkYnNlcnZlciBwb2xsaW5nIGRvbmUgYnkgVmFsZ3JpbmQncwogICAgIHNjaGVkdWxlciBpcyB2ZXJ5IGVmZmljaWVudCwgc28gdGhlIGluY3JlYXNlZCBwb2xsaW5nIGZyZXF1ZW5jeQogICAgIHNob3VsZCBub3QgY2F1c2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCiAgICAgPC9wPgo8cD5XaGVuIHB0cmFjZSBpcyBkaXNhYmxlZCBpbiB2Z2RiLCBhIHF1ZXJ5IHBhY2tldCBzZW50IGJ5IEdEQgogICAgIG1heSB0YWtlIHNpZ25pZmljYW50IHRpbWUgdG8gYmUgaGFuZGxlZCBieSB0aGUgVmFsZ3JpbmQKICAgICBnZGJzZXJ2ZXIuICBJbiBzdWNoIGNhc2VzLCBHREIgbWlnaHQgZW5jb3VudGVyIGEgcHJvdG9jb2wKICAgICB0aW1lb3V0LiAgVG8gYXZvaWQgdGhpcywKICAgICB5b3UgY2FuIGluY3JlYXNlIHRoZSB2YWx1ZSBvZiB0aGUgdGltZW91dCBieSB1c2luZyB0aGUgR0RCCiAgICAgY29tbWFuZCAic2V0IHJlbW90ZXRpbWVvdXQiLgogICAgIDwvcD4KPHA+VWJ1bnR1IHZlcnNpb25zIDEwLjEwIGFuZCBsYXRlciBtYXkgcmVzdHJpY3QgdGhlIHNjb3BlIG9mCiAgICAgcHRyYWNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgcHJvY2VzcyBjYWxsaW5nIHB0cmFjZS4gIEFzIHRoZQogICAgIFZhbGdyaW5kIHByb2Nlc3MgaXMgbm90IGEgY2hpbGQgb2YgdmdkYiwgc3VjaCByZXN0cmljdGVkIHNjb3BpbmcKICAgICBjYXVzZXMgdGhlIHB0cmFjZSBjYWxscyB0byBmYWlsLiAgVG8gYXZvaWQgdGhhdCwgVmFsZ3JpbmQgd2lsbAogICAgIGF1dG9tYXRpY2FsbHkgYWxsb3cgYWxsIHByb2Nlc3NlcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgdXNlcmlkIHRvCiAgICAgInB0cmFjZSIgYSBWYWxncmluZCBwcm9jZXNzLCBieSB1c2luZyBQUl9TRVRfUFRSQUNFUi48L3A+CjxwPlVuYmxvY2tpbmcgcHJvY2Vzc2VzIGJsb2NrZWQgaW4gc3lzdGVtIGNhbGxzIGlzIG5vdAogICAgIGN1cnJlbnRseSBpbXBsZW1lbnRlZCBvbiBNYWMgT1MgWCBhbmQgQW5kcm9pZC4gIFNvIHlvdSBjYW5ub3QKICAgICBjb25uZWN0IHRvIG9yIGludGVycnVwdCBhIHByb2Nlc3MgYmxvY2tlZCBpbiBhIHN5c3RlbSBjYWxsIG9uIE1hYwogICAgIE9TIFggb3IgQW5kcm9pZC4KICAgICA8L3A+CjxwPlVuYmxvY2tpbmcgcHJvY2Vzc2VzIGJsb2NrZWQgaW4gc3lzdGVtIGNhbGxzIGlzIGltcGxlbWVudGVkCiAgICAgdmlhIGFnZW50IHRocmVhZCBvbiBTb2xhcmlzLiBUaGlzIGlzIHF1aXRlIGEgZGlmZmVyZW50IGFwcHJvYWNoCiAgICAgdGhhbiB1c2luZyBwdHJhY2Ugb24gTGludXgsIGJ1dCBsZWFkcyB0byBlcXVpdmFsZW50IHJlc3VsdCAtIFZhbGdyaW5kCiAgICAgZ2Ric2VydmVyIGlzIGludm9rZWQuIE5vdGUgdGhhdCBhZ2VudCB0aHJlYWQgaXMgYSBTb2xhcmlzIE9TCiAgICAgZmVhdHVyZSBhbmQgY2Fubm90IGJlIGRpc2FibGVkLgogICAgIDwvcD4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPkNoYW5naW5nIHJlZ2lzdGVyIHZhbHVlcy48L3A+CjxwPlRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgd2lsbCBvbmx5IG1vZGlmeSB0aGUgdmFsdWVzIG9mIHRoZQogICAgIHRocmVhZCdzIHJlZ2lzdGVycyB3aGVuIHRoZSB0aHJlYWQgaXMgaW4gc3RhdHVzIFJ1bm5hYmxlIG9yCiAgICAgWWllbGRpbmcuICBJbiBvdGhlciBzdGF0ZXMgKHR5cGljYWxseSwgV2FpdFN5cyksIGF0dGVtcHRzIHRvCiAgICAgY2hhbmdlIHJlZ2lzdGVyIHZhbHVlcyB3aWxsIGZhaWwuICBBbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhpcwogICAgIG1lYW5zIHRoYXQgaW5mZXJpb3IgY2FsbHMgYXJlIG5vdCBleGVjdXRlZCBmb3IgYSB0aHJlYWQgd2hpY2ggaXMKICAgICBpbiBhIHN5c3RlbSBjYWxsLCBzaW5jZSB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyIGRvZXMgbm90IGltcGxlbWVudAogICAgIHN5c3RlbSBjYWxsIHJlc3RhcnQuCiAgICAgPC9wPgo8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHA+VW5zdXBwb3J0ZWQgR0RCIGZ1bmN0aW9uYWxpdHkuPC9wPgo8cD5HREIgcHJvdmlkZXMgYSBsb3Qgb2YgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkgYW5kIG5vdCBhbGwKICAgICBvZiBpdCBpcyBzdXBwb3J0ZWQuICBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgYXJlIG5vdAogICAgIHN1cHBvcnRlZDogcmV2ZXJzaWJsZSBkZWJ1Z2dpbmcgYW5kIHRyYWNlcG9pbnRzLgogICAgIDwvcD4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPlVua25vd24gbGltaXRhdGlvbnMgb3IgcHJvYmxlbXMuPC9wPgo8cD5UaGUgY29tYmluYXRpb24gb2YgR0RCLCBWYWxncmluZCBhbmQgdGhlIFZhbGdyaW5kIGdkYnNlcnZlcgogICAgIHByb2JhYmx5IGhhcyB1bmtub3duIG90aGVyIGxpbWl0YXRpb25zIGFuZCBwcm9ibGVtcy4gIElmIHlvdQogICAgIGVuY291bnRlciBzdHJhbmdlIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLCBmZWVsIGZyZWUgdG8gcmVwb3J0IGEKICAgICBidWcuICBCdXQgZmlyc3QgcGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBsaW1pdGF0aW9uIG9yIHByb2JsZW0gaXMKICAgICBub3QgaW5oZXJlbnQgdG8gR0RCIG9yIHRoZSBHREIgcmVtb3RlIHByb3RvY29sLiAgWW91IG1heSBiZSBhYmxlCiAgICAgdG8gZG8gc28gYnkgY2hlY2tpbmcgdGhlIGJlaGF2aW91ciB3aGVuIHVzaW5nIHN0YW5kYXJkIGdkYnNlcnZlcgogICAgIHBhcnQgb2YgdGhlIEdEQiBwYWNrYWdlLgogICAgIDwvcD4KPC9saT4KPC91bD48L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3QyIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9Im1hbnVhbC1jb3JlLWFkdi52Z2RiIj48L2E+My4yLjkuoHZnZGIgY29tbWFuZCBsaW5lIG9wdGlvbnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD4gVXNhZ2U6IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmdkYiBbT1BUSU9OXS4uLiBbWy1jXSBDT01NQU5EXS4uLjwvY29kZT48L3A+CjxwPiB2Z2RiICgiVmFsZ3JpbmQgdG8gR0RCIikgaXMgYSBzbWFsbCBwcm9ncmFtIHRoYXQgaXMgdXNlZCBhcyBhbgppbnRlcm1lZGlhcnkgYmV0d2VlbiBWYWxncmluZCBhbmQgR0RCIG9yIGEgc2hlbGwuClRoZXJlZm9yZSwgaXQgaGFzIHR3byB1c2FnZSBtb2RlczoKPC9wPgo8ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+CjxhIG5hbWU9InZnZGIuZGVzYy5tb2RlcyI+PC9hPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YSBuYW1lPSJtYW51YWwtY29yZS1hZHYudmdkYi1zdGFuZGFsb25lIj48L2E+QXMgYSBzdGFuZGFsb25lIHV0aWxpdHksIGl0IGlzIHVzZWQgZnJvbSBhIHNoZWxsIGNvbW1hbmQKICAgIGxpbmUgdG8gc2VuZCBtb25pdG9yIGNvbW1hbmRzIHRvIGEgcHJvY2VzcyBydW5uaW5nIHVuZGVyCiAgICBWYWxncmluZC4gRm9yIHRoaXMgdXNhZ2UsIHRoZSB2Z2RiIE9QVElPTihzKSBtdXN0IGJlIGZvbGxvd2VkIGJ5CiAgICB0aGUgbW9uaXRvciBjb21tYW5kIHRvIHNlbmQuIFRvIHNlbmQgbW9yZSB0aGFuIG9uZSBjb21tYW5kLAogICAgc2VwYXJhdGUgdGhlbSB3aXRoIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tYzwvY29kZT4gb3B0aW9uLgogICAgPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxhIG5hbWU9Im1hbnVhbC1jb3JlLWFkdi52Z2RiLXJlbGF5Ij48L2E+SW4gY29tYmluYXRpb24gd2l0aCBHREIgInRhcmdldCByZW1vdGUgfCIgY29tbWFuZCwgaXQgaXMKICAgIHVzZWQgYXMgdGhlIHJlbGF5IGFwcGxpY2F0aW9uIGJldHdlZW4gR0RCIGFuZCB0aGUgVmFsZ3JpbmQKICAgIGdkYnNlcnZlci4gIEZvciB0aGlzIHVzYWdlLCBvbmx5IE9QVElPTihzKSBjYW4gYmUgZ2l2ZW4sIGJ1dCBubwogICAgQ09NTUFORCBjYW4gYmUgZ2l2ZW4uCiAgICA8L3A+PC9saT4KPC9vbD4KPC9kaXY+CjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+dmdkYjwvY29kZT4gYWNjZXB0cyB0aGUgZm9sbG93aW5nCm9wdGlvbnM6PC9wPgo8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgo8YSBuYW1lPSJ2Z2RiLm9wdHMubGlzdCI+PC9hPjxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBpZD0mbHQ7bnVtYmVyJmd0OzwvY29kZT48L3NwYW4+PC9kdD4KPGRkPjxwPlNwZWNpZmllcyB0aGUgUElEIG9mCiAgICB0aGUgcHJvY2VzcyB0byB3aGljaCB2Z2RiIG11c3QgY29ubmVjdCB0by4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bAogICAgaW4gY2FzZSBtb3JlIHRoYW4gb25lIFZhbGdyaW5kIGdkYnNlcnZlciBjYW4gYmUgY29ubmVjdGVkIHRvLiAgSWYKICAgIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBpZDwvY29kZT4gYXJndW1lbnQgaXMgbm90IGdpdmVuIGFuZCBtdWx0aXBsZQogICAgVmFsZ3JpbmQgZ2Ric2VydmVyIHByb2Nlc3NlcyBhcmUgcnVubmluZywgdmdkYiB3aWxsIHJlcG9ydCB0aGUKICAgIGxpc3Qgb2Ygc3VjaCBwcm9jZXNzZXMgYW5kIHRoZW4gZXhpdC48L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGItcHJlZml4PC9jb2RlPjwvc3Bhbj48L2R0Pgo8ZGQ+PHA+TXVzdCBiZSBnaXZlbiB0byBib3RoCiAgICBWYWxncmluZCBhbmQgdmdkYiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJlZml4IGZvciB0aGUKICAgIEZJRk9zIChuYW1lZCBwaXBlcykgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBWYWxncmluZAogICAgZ2Ric2VydmVyIGFuZCB2Z2RiLjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2FpdD0mbHQ7bnVtYmVyJmd0OzwvY29kZT48L3NwYW4+PC9kdD4KPGRkPjxwPkluc3RydWN0cyB2Z2RiIHRvCiAgICBzZWFyY2ggZm9yIGF2YWlsYWJsZSBWYWxncmluZCBnZGJzZXJ2ZXJzIGZvciB0aGUgc3BlY2lmaWVkIG51bWJlcgogICAgb2Ygc2Vjb25kcy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgc3RhcnQgYSB2Z2RiIHByb2Nlc3MgCiAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIFZhbGdyaW5kIGdkYnNlcnZlciB3aXRoIHdoaWNoIHlvdSBpbnRlbmQgdGhlCiAgICB2Z2RiIHRvIGNvbW11bmljYXRlLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4gdXNlZCBpbgogICAgY29uanVuY3Rpb24gd2l0aCBhIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYi1wcmVmaXg8L2NvZGU+IHRoYXQgaXMKICAgIHVuaXF1ZSB0byB0aGUgcHJvY2VzcyB5b3Ugd2FudCB0byB3YWl0IGZvci4KICAgIEFsc28sIGlmIHlvdSB1c2UgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2FpdDwvY29kZT4gYXJndW1lbnQgaW4gdGhlIEdEQgogICAgInRhcmdldCByZW1vdGUiIGNvbW1hbmQsIHlvdSBtdXN0IHNldCB0aGUgR0RCIHJlbW90ZXRpbWVvdXQgdG8gYQogICAgdmFsdWUgYmlnZ2VyIHRoYW4gdGhlIC0td2FpdCBhcmd1bWVudCB2YWx1ZS4gIFNlZSBvcHRpb24KICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWF4LWludm9rZS1tczwvY29kZT4gKGp1c3QgYmVsb3cpCiAgICBmb3IgYW4gZXhhbXBsZSBvZiBzZXR0aW5nIHRoZSByZW1vdGV0aW1lb3V0IHZhbHVlLjwvcD48L2RkPgo8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWF4LWludm9rZS1tcz0mbHQ7bnVtYmVyJmd0OzwvY29kZT48L3NwYW4+PC9kdD4KPGRkPgo8cD5HaXZlcyB0aGUKICAgIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggdmdkYiB3aWxsIGZvcmNlIHRoZSBpbnZvY2F0aW9uCiAgICBvZiBnZGJzZXJ2ZXIgZW1iZWRkZWQgaW4gVmFsZ3JpbmQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAKICAgIG1pbGxpc2Vjb25kcy4gQSB2YWx1ZSBvZiAwIGRpc2FibGVzIGZvcmNlZCBpbnZvY2F0aW9uLiBUaGUgZm9yY2VkCiAgICBpbnZvY2F0aW9uIGlzIHVzZWQgd2hlbiB2Z2RiIGlzIGNvbm5lY3RlZCB0byBhIFZhbGdyaW5kIGdkYnNlcnZlciwKICAgIGFuZCB0aGUgVmFsZ3JpbmQgcHJvY2VzcyBoYXMgYWxsIGl0cyB0aHJlYWRzIGJsb2NrZWQgaW4gYSBzeXN0ZW0KICAgIGNhbGwuCiAgICA8L3A+CjxwPklmIHlvdSBzcGVjaWZ5IGEgbGFyZ2UgdmFsdWUsIHlvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIHRoZQogICAgR0RCICJyZW1vdGV0aW1lb3V0IiB2YWx1ZSBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDIgc2Vjb25kcy4KICAgIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHRpbWVvdXQgKGluIHNlY29uZHMpIGlzCiAgICBiaWdnZXIgdGhhbiB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tYXgtaW52b2tlLW1zPC9jb2RlPiB2YWx1ZS4gIEZvcgogICAgZXhhbXBsZSwgZm9yIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWF4LWludm9rZS1tcz01MDAwPC9jb2RlPiwgdGhlIGZvbGxvd2luZwogICAgR0RCIGNvbW1hbmQgaXMgc3VpdGFibGU6CiAgICA8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CiAgICAoZ2RiKSBzZXQgcmVtb3RldGltZW91dCA2CiAgICA8L3ByZT4KPHA+CiAgICA8L3A+CjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jbWQtdGltZS1vdXQ9Jmx0O251bWJlciZndDs8L2NvZGU+PC9zcGFuPjwvZHQ+CjxkZD48cD5JbnN0cnVjdHMgYQogICAgc3RhbmRhbG9uZSB2Z2RiIHRvIGV4aXQgaWYgdGhlIFZhbGdyaW5kIGdkYnNlcnZlciBpdCBpcyBjb25uZWN0ZWQKICAgIHRvIGRvZXMgbm90IHByb2Nlc3MgYSBjb21tYW5kIGluIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHMuCiAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0byBuZXZlciB0aW1lIG91dC48L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXBvcnQ9Jmx0O3BvcnRuciZndDs8L2NvZGU+PC9zcGFuPjwvZHQ+CjxkZD4KPHA+SW5zdHJ1Y3RzIHZnZGIgdG8KICAgIHVzZSB0Y3AvaXAgYW5kIGxpc3RlbiBmb3IgR0RCIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCBuciByYXRoZXIgdGhhbgogICAgdG8gdXNlIGEgcGlwZSB0byBjb21tdW5pY2F0ZSB3aXRoIEdEQi4gVXNpbmcgdGNwL2lwIGFsbG93cyB0byBoYXZlCiAgICBHREIgcnVubmluZyBvbiBvbmUgY29tcHV0ZXIgYW5kIGRlYnVnZ2luZyBhIFZhbGdyaW5kIHByb2Nlc3MKICAgIHJ1bm5pbmcgb24gYW5vdGhlciB0YXJnZXQgY29tcHV0ZXIuCiAgICBFeGFtcGxlOiAKICAgIDwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KIyBPbiB0aGUgdGFyZ2V0IGNvbXB1dGVyLCBzdGFydCB5b3VyIHByb2dyYW0gdW5kZXIgdmFsZ3JpbmQgdXNpbmcKdmFsZ3JpbmQgLS12Z2RiLWVycm9yPTAgcHJvZwojIGFuZCB0aGVuIGluIGFub3RoZXIgc2hlbGwsIHJ1bjoKdmdkYiAtLXBvcnQ9MTIzNAo8L3ByZT4KPHA+T24gdGhlIGNvbXB1dGVyIHdoaWNoIGhvc3RzIEdEQiwgZXhlY3V0ZSB0aGUgY29tbWFuZDoKICAgIDwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KZ2RiIHByb2cKKGdkYikgdGFyZ2V0IHJlbW90ZSB0YXJnZXRpcDoxMjM0CjwvcHJlPgo8cD4KICAgIHdoZXJlIHRhcmdldGlwIGlzIHRoZSBpcCBhZGRyZXNzIG9yIGhvc3RuYW1lIG9mIHRoZSB0YXJnZXQgY29tcHV0ZXIuCiAgICA8L3A+CjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LWM8L2NvZGU+PC9zcGFuPjwvZHQ+CjxkZD4KPHA+VG8gZ2l2ZSBtb3JlIHRoYW4gb25lIGNvbW1hbmQgdG8gYQogICAgc3RhbmRhbG9uZSB2Z2RiLCBzZXBhcmF0ZSB0aGUgY29tbWFuZHMgYnkgYW4KICAgIG9wdGlvbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tYzwvY29kZT4uIEV4YW1wbGU6CiAgICA8L3A+CjxwcmUgY2xhc3M9InNjcmVlbiI+CnZnZGIgdi5zZXQgbG9nX291dHB1dCAtYyBsZWFrX2NoZWNrIGFueQo8L3ByZT4KPC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tbDwvY29kZT48L3NwYW4+PC9kdD4KPGRkPjxwPkluc3RydWN0cyBhIHN0YW5kYWxvbmUgdmdkYiB0byByZXBvcnQKICAgIHRoZSBsaXN0IG9mIHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgYW5kIHRoZW4KICAgIGV4aXQuPC9wPjwvZGQ+CjxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LUQ8L2NvZGU+PC9zcGFuPjwvZHQ+CjxkZD48cD5JbnN0cnVjdHMgYSBzdGFuZGFsb25lIHZnZGIgdG8gc2hvdyB0aGUKICAgIHN0YXRlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IHVzZWQgYnkgdGhlIFZhbGdyaW5kIGdkYnNlcnZlci4gIHZnZGIKICAgIHdpbGwgZXhpdCBhZnRlciBoYXZpbmcgc2hvd24gdGhlIFZhbGdyaW5kIGdkYnNlcnZlciBzaGFyZWQgbWVtb3J5CiAgICBzdGF0ZS48L3A+PC9kZD4KPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tZDwvY29kZT48L3NwYW4+PC9kdD4KPGRkPjxwPkluc3RydWN0cyB2Z2RiIHRvIHByb2R1Y2UgZGVidWdnaW5nCiAgICBvdXRwdXQuICBHaXZlIG11bHRpcGxlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi1kPC9jb2RlPiBhcmdzIHRvIGluY3JlYXNlIHRoZQogICAgdmVyYm9zaXR5LiBXaGVuIGdpdmluZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tZDwvY29kZT4gdG8gYSByZWxheSB2Z2RiLCB5b3UgYmV0dGVyCiAgICByZWRpcmVjdCB0aGUgc3RhbmRhcmQgZXJyb3IgKHN0ZGVycikgb2YgdmdkYiB0byBhIGZpbGUgdG8gYXZvaWQKICAgIGludGVyYWN0aW9uIGJldHdlZW4gR0RCIGFuZCB2Z2RiIGRlYnVnZ2luZyBvdXRwdXQuPC9wPjwvZGQ+CjwvZGw+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LnZhbGdyaW5kLW1vbml0b3ItY29tbWFuZHMiPjwvYT4zLjIuMTAuoFZhbGdyaW5kIG1vbml0b3IgY29tbWFuZHM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBWYWxncmluZCBtb25pdG9yIGNvbW1hbmRzLCBhdmFpbGFibGUKcmVnYXJkbGVzcyBvZiB0aGUgVmFsZ3JpbmQgdG9vbCBzZWxlY3RlZC4gRm9yIHRoZSB0b29sIHNwZWNpZmljCmNvbW1hbmRzLCByZWZlciB0byA8YSBjbGFzcz0ieHJlZiIgaHJlZj0ibWMtbWFudWFsLmh0bWwjbWMtbWFudWFsLm1vbml0b3ItY29tbWFuZHMiIHRpdGxlPSI0LjYuoE1lbWNoZWNrIE1vbml0b3IgQ29tbWFuZHMiPk1lbWNoZWNrIE1vbml0b3IgQ29tbWFuZHM8L2E+LAo8YSBjbGFzcz0ieHJlZiIgaHJlZj0iaGctbWFudWFsLmh0bWwjaGctbWFudWFsLm1vbml0b3ItY29tbWFuZHMiIHRpdGxlPSI3LjcuoEhlbGdyaW5kIE1vbml0b3IgQ29tbWFuZHMiPkhlbGdyaW5kIE1vbml0b3IgQ29tbWFuZHM8L2E+LAo8YSBjbGFzcz0ieHJlZiIgaHJlZj0iY2wtbWFudWFsLmh0bWwjY2wtbWFudWFsLm1vbml0b3ItY29tbWFuZHMiIHRpdGxlPSI2LjQuoENhbGxncmluZCBNb25pdG9yIENvbW1hbmRzIj5DYWxsZ3JpbmQgTW9uaXRvciBDb21tYW5kczwvYT4gYW5kCjxhIGNsYXNzPSJ4cmVmIiBocmVmPSJtcy1tYW51YWwuaHRtbCNtcy1tYW51YWwubW9uaXRvci1jb21tYW5kcyIgdGl0bGU9IjkuNC6gTWFzc2lmIE1vbml0b3IgQ29tbWFuZHMiPk1hc3NpZiBNb25pdG9yIENvbW1hbmRzPC9hPi4gPC9wPgo8cD4gVGhlIG1vbml0b3IgY29tbWFuZHMgY2FuIGJlIHNlbnQgZWl0aGVyIGZyb20gYSBzaGVsbCBjb21tYW5kIGxpbmUsIGJ5IHVzaW5nIGEKc3RhbmRhbG9uZSB2Z2RiLCBvciBmcm9tIEdEQiwgYnkgdXNpbmcgR0RCJ3MgIm1vbml0b3IiCmNvbW1hbmQgKHNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0ibWFudWFsLWNvcmUtYWR2Lmh0bWwjbWFudWFsLWNvcmUtYWR2LmdkYnNlcnZlci1jb21tYW5kaGFuZGxpbmciIHRpdGxlPSIzLjIuNS6gTW9uaXRvciBjb21tYW5kIGhhbmRsaW5nIGJ5IHRoZSBWYWxncmluZCBnZGJzZXJ2ZXIiPk1vbml0b3IgY29tbWFuZCBoYW5kbGluZyBieSB0aGUgVmFsZ3JpbmQgZ2Ric2VydmVyPC9hPikuClRoZXkgY2FuIGFsc28gYmUgbGF1bmNoZWQgYnkgdGhlIGNsaWVudCBwcm9ncmFtLCB1c2luZyB0aGUgVkFMR1JJTkRfTU9OSVRPUl9DT01NQU5ECmNsaWVudCByZXF1ZXN0Lgo8L3A+CjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5oZWxwIFtkZWJ1Z108L2NvZGU+IGluc3RydWN0cyBWYWxncmluZCdzIGdkYnNlcnZlcgogICAgdG8gZ2l2ZSB0aGUgbGlzdCBvZiBhbGwgbW9uaXRvciBjb21tYW5kcyBvZiB0aGUgVmFsZ3JpbmQgY29yZSBhbmQKICAgIG9mIHRoZSB0b29sLiBUaGUgb3B0aW9uYWwgImRlYnVnIiBhcmd1bWVudCB0ZWxscyB0byBhbHNvIGdpdmUgaGVscAogICAgZm9yIHRoZSBtb25pdG9yIGNvbW1hbmRzIGFpbWVkIGF0IFZhbGdyaW5kIGludGVybmFscyBkZWJ1Z2dpbmcuCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuaW5mbyBhbGxfZXJyb3JzPC9jb2RlPiBzaG93cyBhbGwgZXJyb3JzIGZvdW5kCiAgICBzbyBmYXIuPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmluZm8gbGFzdF9lcnJvcjwvY29kZT4gc2hvd3MgdGhlIGxhc3QgZXJyb3IKICAgIGZvdW5kLjwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHA+PGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuaW5mbyBsb2NhdGlvbiAmbHQ7YWRkciZndDs8L2NvZGU+IG91dHB1dHMKICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiAmbHQ7YWRkciZndDsuIFBvc3NpYmx5LCB0aGUKICAgIGZvbGxvd2luZyBhcmUgZGVzY3JpYmVkOiBnbG9iYWwgdmFyaWFibGVzLCBsb2NhbCAoc3RhY2spCiAgICB2YXJpYWJsZXMsIGFsbG9jYXRlZCBvciBmcmVlZCBibG9ja3MsIC4uLiAgVGhlIGluZm9ybWF0aW9uCiAgICBwcm9kdWNlZCBkZXBlbmRzIG9uIHRoZSB0b29sIGFuZCBvbiB0aGUgb3B0aW9ucyBnaXZlbiB0byB2YWxncmluZC4KICAgIFNvbWUgdG9vbHMgKGUuZy4gbWVtY2hlY2sgYW5kIGhlbGdyaW5kKSBwcm9kdWNlIG1vcmUgZGV0YWlsZWQKICAgIGluZm9ybWF0aW9uIGZvciBjbGllbnQgaGVhcCBibG9ja3MuIEZvciBleGFtcGxlLCB0aGVzZSB0b29scyBzaG93CiAgICB0aGUgc3RhY2t0cmFjZSB3aGVyZSB0aGUgaGVhcCBibG9jayB3YXMgYWxsb2NhdGVkLiBJZiBhIHRvb2wgZG9lcwogICAgbm90IHJlcGxhY2UgdGhlIG1hbGxvYy9mcmVlLy4uLiBmdW5jdGlvbnMsIHRoZW4gY2xpZW50IGhlYXAgYmxvY2tzCiAgICB3aWxsIG5vdCBiZSBkZXNjcmliZWQuICBVc2UgdGhlCiAgICBvcHRpb24gPGNvZGUgY2xhc3M9InZhcm5hbWUiPi0tcmVhZC12YXItaW5mbz15ZXM8L2NvZGU+IHRvIG9idGFpbiBtb3JlCiAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBnbG9iYWwgb3IgbG9jYWwgKHN0YWNrKSB2YXJpYWJsZXMuCiAgICA8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KKGdkYikgbW9uaXRvciB2LmluZm8gbG9jYXRpb24gMHg4MDUwYjIwCiBMb2NhdGlvbiAweDgwNTBiMjAgaXMgMCBieXRlcyBpbnNpZGUgZ2xvYmFsIHZhciAibXgiCiBkZWNsYXJlZCBhdCB0YzE5X3NoYWRvd21lbS5jOjE5CgooZ2RiKSBtbyB2LmluIGxvYyAweDU4MmYzM2MKIExvY2F0aW9uIDB4NTgyZjMzYyBpcyAwIGJ5dGVzIGluc2lkZSBsb2NhbCB2YXIgImluZm8iCiBkZWNsYXJlZCBhdCB0YzE5X3NoYWRvd21lbS5jOjI4MiwgaW4gZnJhbWUgIzEgb2YgdGhyZWFkIDMKKGdkYikgCjwvcHJlPgo8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48Y29kZSBjbGFzcz0idmFybmFtZSI+di5pbmZvIG5fZXJyc19mb3VuZCBbbXNnXTwvY29kZT4gc2hvd3MgdGhlIG51bWJlciBvZgogICAgZXJyb3JzIGZvdW5kIHNvIGZhciwgdGhlIG5yIG9mIGVycm9ycyBzaG93biBzbyBmYXIgYW5kIHRoZSBjdXJyZW50CiAgICB2YWx1ZSBvZiB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12Z2RiLWVycm9yPC9jb2RlPiBhcmd1bWVudC4gVGhlIG9wdGlvbmFsCiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm1zZzwvY29kZT4gKG9uZSBvciBtb3JlIHdvcmRzKSBpcyBhcHBlbmRlZC4KICAgIFR5cGljYWxseSwgdGhpcyBjYW4gYmUgdXNlZCB0byBpbnNlcnQgbWFya2VycyBpbiBhIHByb2Nlc3Mgb3V0cHV0CiAgICBmaWxlIGJldHdlZW4gc2V2ZXJhbCB0ZXN0cyBleGVjdXRlZCBpbiBzZXF1ZW5jZSBieSBhIHByb2Nlc3MKICAgIHN0YXJ0ZWQgb25seSBvbmNlLiBUaGlzIGFsbG93cyB0byBhc3NvY2lhdGUgdGhlIGVycm9ycyByZXBvcnRlZAogICAgYnkgVmFsZ3JpbmQgd2l0aCB0aGUgc3BlY2lmaWMgdGVzdCB0aGF0IHByb2R1Y2VkIHRoZXNlIGVycm9ycy4KICAgIDwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48Y29kZSBjbGFzcz0idmFybmFtZSI+di5pbmZvIG9wZW5fZmRzPC9jb2RlPiBzaG93cyB0aGUgbGlzdCBvZiBvcGVuIGZpbGUKICAgIGRlc2NyaXB0b3JzIGFuZCBkZXRhaWxzIHJlbGF0ZWQgdG8gdGhlIGZpbGUgZGVzY3JpcHRvci4KICAgIFRoaXMgb25seSB3b3JrcyBpZiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRyYWNrLWZkcz15ZXM8L2NvZGU+CiAgICB3YXMgZ2l2ZW4gYXQgVmFsZ3JpbmQgc3RhcnR1cC48L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LnNldCB7Z2RiX291dHB1dCB8IGxvZ19vdXRwdXQgfAogICAgbWl4ZWRfb3V0cHV0fTwvY29kZT4gYWxsb3dzIHJlZGlyZWN0aW9uIG9mIHRoZSBWYWxncmluZCBvdXRwdXQKICAgIChlLmcuIHRoZSBlcnJvcnMgZGV0ZWN0ZWQgYnkgdGhlIHRvb2wpLiAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcwogICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5taXhlZF9vdXRwdXQ8L2NvZGU+LjwvcD4KPHA+V2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm1peGVkX291dHB1dDwvY29kZT4sIHRoZQogICAgVmFsZ3JpbmQgb3V0cHV0IGdvZXMgdG8gdGhlIFZhbGdyaW5kIGxvZyAodHlwaWNhbGx5IHN0ZGVycikgd2hpbGUKICAgIHRoZSBvdXRwdXQgb2YgdGhlIGludGVyYWN0aXZlIEdEQiBtb25pdG9yIGNvbW1hbmRzIChlLmcuIAogICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52LmluZm8gbGFzdF9lcnJvcjwvY29kZT4pCiAgICBpcyBkaXNwbGF5ZWQgYnkgR0RCLjwvcD4KPHA+V2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmdkYl9vdXRwdXQ8L2NvZGU+LCBib3RoIHRoZQogICAgVmFsZ3JpbmQgb3V0cHV0IGFuZCB0aGUgaW50ZXJhY3RpdmUgR0RCIG1vbml0b3IgY29tbWFuZHMgb3V0cHV0IGFyZQogICAgZGlzcGxheWVkIGJ5IEdEQi48L3A+CjxwPldpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5sb2dfb3V0cHV0PC9jb2RlPiwgYm90aCB0aGUKICAgIFZhbGdyaW5kIG91dHB1dCBhbmQgdGhlIGludGVyYWN0aXZlIEdEQiBtb25pdG9yIGNvbW1hbmRzIG91dHB1dCBnbwogICAgdG8gdGhlIFZhbGdyaW5kIGxvZy48L3A+CjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LndhaXQgW21zIChkZWZhdWx0IDApXTwvY29kZT4gaW5zdHJ1Y3RzCiAgICBWYWxncmluZCBnZGJzZXJ2ZXIgdG8gc2xlZXAgIm1zIiBtaWxsaS1zZWNvbmRzIGFuZCB0aGVuCiAgICBjb250aW51ZS4gIFdoZW4gc2VudCBmcm9tIGEgc3RhbmRhbG9uZSB2Z2RiLCBpZiB0aGlzIGlzIHRoZSBsYXN0CiAgICBjb21tYW5kLCB0aGUgVmFsZ3JpbmQgcHJvY2VzcyB3aWxsIGNvbnRpbnVlIHRoZSBleGVjdXRpb24gb2YgdGhlCiAgICBndWVzdCBwcm9jZXNzLiBUaGUgdHlwaWNhbCB1c2FnZSBvZiB0aGlzIGlzIHRvIHVzZSB2Z2RiIHRvIHNlbmQgYQogICAgIm5vLW9wIiBjb21tYW5kIHRvIGEgVmFsZ3JpbmQgZ2Ric2VydmVyIHNvIGFzIHRvIGNvbnRpbnVlIHRoZQogICAgZXhlY3V0aW9uIG9mIHRoZSBndWVzdCBwcm9jZXNzLgogICAgPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmtpbGw8L2NvZGU+IHJlcXVlc3RzIHRoZSBnZGJzZXJ2ZXIgdG8ga2lsbAogICAgdGhlIHByb2Nlc3MuIFRoaXMgY2FuIGJlIHVzZWQgZnJvbSBhIHN0YW5kYWxvbmUgdmdkYiB0byBwcm9wZXJseQogICAga2lsbCBhIFZhbGdyaW5kIHByb2Nlc3Mgd2hpY2ggaXMgY3VycmVudGx5IGV4cGVjdGluZyBhIHZnZGIKICAgIGNvbm5lY3Rpb24uPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LnNldCB2Z2RiLWVycm9yICZsdDtlcnJvcm5yJmd0OzwvY29kZT4KICAgIGR5bmFtaWNhbGx5IGNoYW5nZXMgdGhlIHZhbHVlIG9mIHRoZSAKICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmdkYi1lcnJvcjwvY29kZT4gYXJndW1lbnQuIEEKICAgIHR5cGljYWwgdXNhZ2Ugb2YgdGhpcyBpcyB0byBzdGFydCB3aXRoCiAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZnZGItZXJyb3I9MDwvY29kZT4gb24gdGhlCiAgICBjb21tYW5kIGxpbmUsIHRoZW4gc2V0IGEgZmV3IGJyZWFrcG9pbnRzLCBzZXQgdGhlIHZnZGItZXJyb3IgdmFsdWUKICAgIHRvIGEgaHVnZSB2YWx1ZSBhbmQgY29udGludWUgZXhlY3V0aW9uLjwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48Y29kZSBjbGFzcz0idmFybmFtZSI+eHRtZW1vcnkgWyZsdDtmaWxlbmFtZSZndDsgZGVmYXVsdCB4dG1lbW9yeS5rY2cuJXAuJW5dPC9jb2RlPgogICAgICByZXF1ZXN0cyB0aGUgdG9vbCB0byBwcm9kdWNlIGFuIHh0cmVlIGhlYXAgbWVtb3J5IHJlcG9ydC4KICAgICAgU2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSJtYW51YWwtY29yZS5odG1sI21hbnVhbC1jb3JlLnh0cmVlIiB0aXRsZT0iMi45LqBFeGVjdXRpb24gVHJlZXMiPkV4ZWN1dGlvbiBUcmVlczwvYT4gZm9yCiAgICAgIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gYWJvdXQgZXhlY3V0aW9uIHRyZWVzLiA8L3A+PC9saT4KPC91bD48L2Rpdj4KPHA+VGhlIGZvbGxvd2luZyBWYWxncmluZCBtb25pdG9yIGNvbW1hbmRzIGFyZSB1c2VmdWwgZm9yCmludmVzdGlnYXRpbmcgdGhlIGJlaGF2aW91ciBvZiBWYWxncmluZCBvciBpdHMgZ2Ric2VydmVyIGluIGNhc2Ugb2YKcHJvYmxlbXMgb3IgYnVncy48L3A+CjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmRvIGV4cGVuc2l2ZV9zYW5pdHlfY2hlY2tfZ2VuZXJhbDwvY29kZT4KICAgIGV4ZWN1dGVzIHZhcmlvdXMgc2FuaXR5IGNoZWNrcy4gSW4gcGFydGljdWxhciwgdGhlIHNhbml0eSBvZiB0aGUKICAgIFZhbGdyaW5kIGhlYXAgaXMgdmVyaWZpZWQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugc3VzcGVjdCB0aGF0CiAgICB5b3VyIHByb2dyYW0gYW5kL29yIFZhbGdyaW5kIGhhcyBhIGJ1ZyBjb3JydXB0aW5nIFZhbGdyaW5kIGRhdGEKICAgIHN0cnVjdHVyZS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgd2hlbiBhIFZhbGdyaW5kIHRvb2wKICAgIHJlcG9ydHMgYSBjbGllbnQgZXJyb3IgdG8gdGhlIGNvbm5lY3RlZCBHREIsIGluIG9yZGVyIHRvIHZlcmlmeQogICAgdGhlIHNhbml0eSBvZiBWYWxncmluZCBiZWZvcmUgY29udGludWluZyB0aGUgZXhlY3V0aW9uLgogICAgPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmluZm8gZ2Ric2VydmVyX3N0YXR1czwvY29kZT4gc2hvd3MgdGhlCiAgICBnZGJzZXJ2ZXIgc3RhdHVzLiBJbiBjYXNlIG9mIHByb2JsZW1zIChlLmcuIG9mIGNvbW11bmljYXRpb25zKSwKICAgIHRoaXMgc2hvd3MgdGhlIHZhbHVlcyBvZiBzb21lIHJlbGV2YW50IFZhbGdyaW5kIGdkYnNlcnZlciBpbnRlcm5hbAogICAgdmFyaWFibGVzLiAgTm90ZSB0aGF0IHRoZSB2YXJpYWJsZXMgcmVsYXRlZCB0byBicmVha3BvaW50cyBhbmQKICAgIHdhdGNocG9pbnRzIChlLmcuIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludCBhZGRyZXNzZXMgYW5kIHRoZSBudW1iZXIgb2YKICAgIHdhdGNocG9pbnRzKSB3aWxsIGJlIHplcm8sIGFzIEdEQiBieSBkZWZhdWx0IHJlbW92ZXMgYWxsCiAgICB3YXRjaHBvaW50cyBhbmQgYnJlYWtwb2ludHMgd2hlbiBleGVjdXRpb24gc3RvcHMsIGFuZCByZS1pbnNlcnRzCiAgICB0aGVtIHdoZW4gcmVzdW1pbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZGVidWdnZWQgcHJvY2Vzcy4gIFlvdSBjYW4KICAgIGNoYW5nZSB0aGlzIEdEQiBiZWhhdmlvdXIgYnkgdXNpbmcgdGhlIEdEQiBjb21tYW5kCiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPnNldCBicmVha3BvaW50IGFsd2F5cy1pbnNlcnRlZCBvbjwvY29kZT4uCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuaW5mbyBtZW1vcnkgW2FzcGFjZW1ncl08L2NvZGU+IHNob3dzIHRoZSBzdGF0aXN0aWNzIG9mCiAgICBWYWxncmluZCdzIGludGVybmFsIGhlYXAgbWFuYWdlbWVudC4gSWYKICAgIG9wdGlvbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXByb2ZpbGUtaGVhcD15ZXM8L2NvZGU+IHdhcyBnaXZlbiwgZGV0YWlsZWQKICAgIHN0YXRpc3RpY3Mgd2lsbCBiZSBvdXRwdXQuIFdpdGggdGhlIG9wdGlvbmFsIGFyZ3VtZW50CiAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmFzcGFjZW1ncjwvY29kZT4uIHRoZSBzZWdtZW50IGxpc3QgbWFpbnRhaW5lZAogICAgYnkgdmFsZ3JpbmQgYWRkcmVzcyBzcGFjZSBtYW5hZ2VyIHdpbGwgYmUgb3V0cHV0LiBOb3RlIHRoYXQKICAgIHRoaXMgbGlzdCBvZiBzZWdtZW50cyBpcyBhbHdheXMgb3V0cHV0IG9uIHRoZSBWYWxncmluZCBsb2cuCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuaW5mbyBleGVjdHh0PC9jb2RlPiBzaG93cyBpbmZvcm1hdGlvbiBhYm91dAogICAgdGhlICJleGVjdXRhYmxlIGNvbnRleHRzIiAoaS5lLiB0aGUgc3RhY2sgdHJhY2VzKSByZWNvcmRlZCBieQogICAgVmFsZ3JpbmQuICBGb3Igc29tZSBwcm9ncmFtcywgVmFsZ3JpbmQgY2FuIHJlY29yZCBhIHZlcnkgaGlnaAogICAgbnVtYmVyIG9mIHN1Y2ggc3RhY2sgdHJhY2VzLCBjYXVzaW5nIGEgaGlnaCBtZW1vcnkgdXNhZ2UuICBUaGlzCiAgICBtb25pdG9yIGNvbW1hbmQgc2hvd3MgYWxsIHRoZSByZWNvcmRlZCBzdGFjayB0cmFjZXMsIGZvbGxvd2VkIGJ5CiAgICBzb21lIHN0YXRpc3RpY3MuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYW5hbHlzZSB0aGUgcmVhc29uIGZvciBoYXZpbmcKICAgIGEgYmlnIG51bWJlciBvZiBzdGFjayB0cmFjZXMuIFR5cGljYWxseSwgeW91IHdpbGwgdXNlIHRoaXMgY29tbWFuZAogICAgaWYgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuaW5mbyBtZW1vcnk8L2NvZGU+IGhhcyBzaG93biBzaWduaWZpY2FudCBtZW1vcnkKICAgIHVzYWdlIGJ5IHRoZSAiZXhlY3R4dCIgYXJlbmEuCiAgICA8L3A+PC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmluZm8gc2NoZWR1bGVyPC9jb2RlPiBzaG93cyB2YXJpb3VzCiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aHJlYWRzLiBGaXJzdCwgaXQgb3V0cHV0cyB0aGUgaG9zdCBzdGFjayB0cmFjZSwKICAgIGkuZS4gdGhlIFZhbGdyaW5kIGNvZGUgYmVpbmcgZXhlY3V0ZWQuIFRoZW4sIGZvciBlYWNoIHRocmVhZCwgaXQKICAgIG91dHB1dHMgdGhlIHRocmVhZCBzdGF0ZS4gRm9yIG5vbiB0ZXJtaW5hdGVkIHRocmVhZHMsIHRoZSBzdGF0ZSBpcwogICAgZm9sbG93ZWQgYnkgdGhlIGd1ZXN0IChjbGllbnQpIHN0YWNrIHRyYWNlLiBGaW5hbGx5LCBmb3IgZWFjaAogICAgYWN0aXZlIHRocmVhZCBvciBmb3IgZWFjaCB0ZXJtaW5hdGVkIHRocmVhZCBzbG90IG5vdCB5ZXQgcmUtdXNlZCwKICAgIGl0IHNob3dzIHRoZSBtYXggdXNhZ2Ugb2YgdGhlIHZhbGdyaW5kIHN0YWNrLjwvcD4KPHA+U2hvd2luZyB0aGUgY2xpZW50IHN0YWNrIHRyYWNlcyBhbGxvd3MgdG8gY29tcGFyZSB0aGUgc3RhY2sKICAgIHRyYWNlcyBwcm9kdWNlZCBieSB0aGUgVmFsZ3JpbmQgdW53aW5kZXIgd2l0aCB0aGUgc3RhY2sgdHJhY2VzCiAgICBwcm9kdWNlZCBieSBHREIrVmFsZ3JpbmQgZ2Ric2VydmVyLiBQYXkgYXR0ZW50aW9uIHRoYXQgR0RCIGFuZAogICAgVmFsZ3JpbmQgc2NoZWR1bGVyIHN0YXR1cyBoYXZlIHRoZWlyIG93biB0aHJlYWQgbnVtYmVyaW5nCiAgICBzY2hlbWUuIFRvIG1ha2UgdGhlIGxpbmsgYmV0d2VlbiB0aGUgR0RCIHRocmVhZCBudW1iZXIgYW5kIHRoZQogICAgY29ycmVzcG9uZGluZyBWYWxncmluZCBzY2hlZHVsZXIgdGhyZWFkIG51bWJlciwgdXNlIHRoZSBHREIKICAgIGNvbW1hbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5pbmZvIHRocmVhZHM8L2NvZGU+LiAgVGhlIG91dHB1dAogICAgb2YgdGhpcyBjb21tYW5kIHNob3dzIHRoZSBHREIgdGhyZWFkIG51bWJlciBhbmQgdGhlIHZhbGdyaW5kCiAgICAndGlkJy4gVGhlICd0aWQnIGlzIHRoZSB0aHJlYWQgbnVtYmVyIG91dHB1dAogICAgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52LmluZm8gc2NoZWR1bGVyPC9jb2RlPi4gIFdoZW4gdXNpbmcKICAgIHRoZSBjYWxsZ3JpbmQgdG9vbCwgdGhlIGNhbGxncmluZCBtb25pdG9yIGNvbW1hbmQKICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+c3RhdHVzPC9jb2RlPiBvdXRwdXRzIGludGVybmFsIGNhbGxncmluZAogICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YWNrL2NhbGwgZ3JhcGggaXQgbWFpbnRhaW5zLgogICAgPC9wPgo8L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48Y29kZSBjbGFzcz0idmFybmFtZSI+di5pbmZvIHN0YXRzPC9jb2RlPiBzaG93cyB2YXJpb3VzIHZhbGdyaW5kIGNvcmUgYW5kCiAgICB0b29sIHN0YXRpc3RpY3MuIFdpdGggdGhpcywgVmFsZ3JpbmQgYW5kIHRvb2wgc3RhdGlzdGljcyBjYW4KICAgIGJlIGV4YW1pbmVkIHdoaWxlIHJ1bm5pbmcsIGV2ZW4gd2l0aG91dCBvcHRpb24gPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zdGF0cz15ZXM8L2NvZGU+LgogICAgPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LmluZm8gdW53aW5kICAmbHQ7YWRkciZndDsgWyZsdDtsZW4mZ3Q7XTwvY29kZT4gc2hvd3MKICAgIHRoZSBDRkkgdW53aW5kIGRlYnVnIGluZm8gZm9yIHRoZSBhZGRyZXNzIHJhbmdlIFthZGRyLCBhZGRyK2xlbi0xXS4KICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICZsdDtsZW4mZ3Q7IGlzIDEsIGdpdmluZyB0aGUgdW53aW5kIGluZm9ybWF0aW9uCiAgICBmb3IgdGhlIGluc3RydWN0aW9uIGF0ICZsdDthZGRyJmd0Oy4KICAgIDwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48Y29kZSBjbGFzcz0idmFybmFtZSI+di5zZXQgZGVidWdsb2cgJmx0O2ludHZhbHVlJmd0OzwvY29kZT4gc2V0cyB0aGUKICAgIFZhbGdyaW5kIGRlYnVnIGxvZyBsZXZlbCB0byAmbHQ7aW50dmFsdWUmZ3Q7LiAgVGhpcyBhbGxvd3MgdG8KICAgIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgbG9nIGxldmVsIG9mIFZhbGdyaW5kIGUuZy4gd2hlbiBhIHByb2JsZW0KICAgIGlzIGRldGVjdGVkLjwvcD48L2xpPgo8bGkgY2xhc3M9Imxpc3RpdGVtIj4KPHA+PGNvZGUgY2xhc3M9InZhcm5hbWUiPnYuc2V0IGhvc3R2aXNpYmlsaXR5IFt5ZXMqfG5vXTwvY29kZT4gVGhlIHZhbHVlCiAgICAieWVzIiBpbmRpY2F0ZXMgdG8gZ2Ric2VydmVyIHRoYXQgR0RCIGNhbiBsb29rIGF0IHRoZSBWYWxncmluZAogICAgJ2hvc3QnIChpbnRlcm5hbCkgc3RhdHVzL21lbW9yeS4gIm5vIiBkaXNhYmxlcyB0aGlzIGFjY2Vzcy4KICAgIFdoZW4gaG9zdHZpc2liaWxpdHkgaXMgYWN0aXZhdGVkLCBHREIgY2FuIGUuZy4gbG9vayBhdCBWYWxncmluZAogICAgZ2xvYmFsIHZhcmlhYmxlcy4gQXMgYW4gZXhhbXBsZSwgdG8gZXhhbWluZSBhIFZhbGdyaW5kIGdsb2JhbAogICAgdmFyaWFibGUgb2YgdGhlIG1lbWNoZWNrIHRvb2wgb24gYW4geDg2LCBkbyB0aGUgZm9sbG93aW5nIHNldHVwOjwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KKGdkYikgbW9uaXRvciB2LnNldCBob3N0dmlzaWJpbGl0eSB5ZXMKKGdkYikgYWRkLXN5bWJvbC1maWxlIC9wYXRoL3RvL3Rvb2wvZXhlY3V0YWJsZS9maWxlL21lbWNoZWNrLXg4Ni1saW51eCAweDU4MDAwMDAwCmFkZCBzeW1ib2wgdGFibGUgZnJvbSBmaWxlICIvcGF0aC90by90b29sL2V4ZWN1dGFibGUvZmlsZS9tZW1jaGVjay14ODYtbGludXgiIGF0CgkudGV4dF9hZGRyID0gMHg1ODAwMDAwMAooeSBvciBuKSB5ClJlYWRpbmcgc3ltYm9scyBmcm9tIC9wYXRoL3RvL3Rvb2wvZXhlY3V0YWJsZS9maWxlL21lbWNoZWNrLXg4Ni1saW51eC4uLmRvbmUuCihnZGIpIAo8L3ByZT4KPHA+QWZ0ZXIgdGhhdCwgdmFyaWFibGVzIGRlZmluZWQgaW4gbWVtY2hlY2steDg2LWxpbnV4IGNhbiBiZSBhY2Nlc3NlZCwgZS5nLjwvcD4KPHByZSBjbGFzcz0ic2NyZWVuIj4KKGdkYikgcCAveCB2Z1BsYWluX3RocmVhZHNbMV0ub3Nfc3RhdGUKJDMgPSB7bHdwaWQgPSAweDQ2ODgsIHRocmVhZGdyb3VwID0gMHg0Njg4LCBwYXJlbnQgPSAweDAsIAogIHZhbGdyaW5kX3N0YWNrX2Jhc2UgPSAweDYyZTc4MDAwLCB2YWxncmluZF9zdGFja19pbml0X1NQID0gMHg2MmY3OWZlMCwgCiAgZXhpdGNvZGUgPSAweDAsIGZhdGFsc2lnID0gMHgwfQooZ2RiKSBwIHZleF9jb250cm9sCiQ1ID0ge2lyb3B0X3ZlcmJvc2l0eSA9IDAsIGlyb3B0X2xldmVsID0gMiwgCiAgaXJvcHRfcmVnaXN0ZXJfdXBkYXRlcyA9IFZleFJlZ1VwZFVud2luZHJlZ3NBdE1lbUFjY2VzcywgCiAgaXJvcHRfdW5yb2xsX3RocmVzaCA9IDEyMCwgZ3Vlc3RfbWF4X2luc25zID0gNjAsIGd1ZXN0X2NoYXNlX3RocmVzaCA9IDEwLCAKICBndWVzdF9jaGFzZV9jb25kID0gMCAnXDAwMCd9CihnZGIpIAo8L3ByZT4KPC9saT4KPGxpIGNsYXNzPSJsaXN0aXRlbSI+CjxwPjxjb2RlIGNsYXNzPSJ2YXJuYW1lIj52LnRyYW5zbGF0ZSAmbHQ7YWRkcmVzcyZndDsKICAgIFsmbHQ7dHJhY2VmbGFncyZndDtdPC9jb2RlPiBzaG93cyB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGJsb2NrCiAgICBjb250YWluaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YWRkcmVzczwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4KICAgIHRyYWNlIGZsYWdzLiBUaGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij50cmFjZWZsYWdzPC9jb2RlPiB2YWx1ZQogICAgYml0IHBhdHRlcm5zIGhhdmUgc2ltaWxhciBtZWFuaW5nIHRvIFZhbGdyaW5kJ3MKICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdHJhY2UtZmxhZ3M8L2NvZGU+IG9wdGlvbi4gIEl0IGNhbiBiZSBnaXZlbgogICAgaW4gaGV4YWRlY2ltYWwgKGUuZy4gMHgyMCkgb3IgZGVjaW1hbCAoZS5nLiAzMikgb3IgaW4gYmluYXJ5IDFzCiAgICBhbmQgMHMgYml0IChlLmcuIDBiMDAxMDAwMDApLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdHJhY2VmbGFncwogICAgaXMgMGIwMDEwMDAwMCwgY29ycmVzcG9uZGluZyB0byAic2hvdyBhZnRlciBpbnN0cnVtZW50YXRpb24iLiAKICAgIFRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kIGFsd2F5cyBnb2VzIHRvIHRoZSBWYWxncmluZAogICAgbG9nLjwvcD4KPHA+VGhlIGFkZGl0aW9uYWwgYml0IGZsYWcgMGIxMDAwMDAwMDAgKGJpdCA4KQogICAgaGFzIG5vIGVxdWl2YWxlbnQgaW4gdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdHJhY2UtZmxhZ3M8L2NvZGU+IG9wdGlvbi4KICAgIEl0IGVuYWJsZXMgdHJhY2luZyBvZiB0aGUgZ2Ric2VydmVyIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbi4gIE5vdGUKICAgIHRoYXQgdGhpcyBiaXQgOCBjYW4gb25seSBlbmFibGUgdGhlIGFkZGl0aW9uIG9mIGdkYnNlcnZlcgogICAgaW5zdHJ1bWVudGF0aW9uIGluIHRoZSB0cmFjZS4gIFNldHRpbmcgaXQgdG8gMCB3aWxsIG5vdAogICAgZGlzYWJsZSB0aGUgdHJhY2luZyBvZiB0aGUgZ2Ric2VydmVyIGluc3RydW1lbnRhdGlvbiBpZiBpdCBpcwogICAgYWN0aXZlIGZvciBzb21lIG90aGVyIHJlYXNvbiwgZm9yIGV4YW1wbGUgYmVjYXVzZSB0aGVyZSBpcyBhIGJyZWFrcG9pbnQgYXQKICAgIHRoaXMgYWRkcmVzcyBvciBiZWNhdXNlIGdkYnNlcnZlciBpcyBpbiBzaW5nbGUgc3RlcHBpbmcKICAgIG1vZGUuPC9wPgo8L2xpPgo8L3VsPjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3QxIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LndyYXBwaW5nIj48L2E+My4zLqBGdW5jdGlvbiB3cmFwcGluZzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+CjxwPgpWYWxncmluZCBhbGxvd3MgY2FsbHMgdG8gc29tZSBzcGVjaWZpZWQgZnVuY3Rpb25zIHRvIGJlIGludGVyY2VwdGVkIGFuZApyZXJvdXRlZCB0byBhIGRpZmZlcmVudCwgdXNlci1zdXBwbGllZCBmdW5jdGlvbi4gIFRoaXMgY2FuIGRvIHdoYXRldmVyIGl0Cmxpa2VzLCB0eXBpY2FsbHkgZXhhbWluaW5nIHRoZSBhcmd1bWVudHMsIGNhbGxpbmcgb253YXJkcyB0byB0aGUgb3JpZ2luYWwsCmFuZCBwb3NzaWJseSBleGFtaW5pbmcgdGhlIHJlc3VsdC4gIEFueSBudW1iZXIgb2YgZnVuY3Rpb25zIG1heSBiZQp3cmFwcGVkLjwvcD4KPHA+CkZ1bmN0aW9uIHdyYXBwaW5nIGlzIHVzZWZ1bCBmb3IgaW5zdHJ1bWVudGluZyBhbiBBUEkgaW4gc29tZSB3YXkuICBGb3IKZXhhbXBsZSwgSGVsZ3JpbmQgd3JhcHMgZnVuY3Rpb25zIGluIHRoZSBQT1NJWCBwdGhyZWFkcyBBUEkgc28gaXQgY2FuIGtub3cKYWJvdXQgdGhyZWFkIHN0YXR1cyBjaGFuZ2VzLCBhbmQgdGhlIGNvcmUgaXMgYWJsZSB0byB3cmFwCmZ1bmN0aW9ucyBpbiB0aGUgTVBJIChtZXNzYWdlLXBhc3NpbmcpIEFQSSBzbyBpdCBjYW4ga25vdwpvZiBtZW1vcnkgc3RhdHVzIGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIG1lc3NhZ2UgYXJyaXZhbC9kZXBhcnR1cmUuClN1Y2ggaW5mb3JtYXRpb24gaXMgdXN1YWxseSBwYXNzZWQgdG8gVmFsZ3JpbmQgYnkgdXNpbmcgY2xpZW50CnJlcXVlc3RzIGluIHRoZSB3cmFwcGVyIGZ1bmN0aW9ucywgYWx0aG91Z2ggdGhlIGV4YWN0IG1lY2hhbmlzbSBtYXkgdmFyeS4KPC9wPgo8ZGl2IGNsYXNzPSJzZWN0MiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYud3JhcHBpbmcuZXhhbXBsZSI+PC9hPjMuMy4xLqBBIFNpbXBsZSBFeGFtcGxlPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+U3VwcG9zaW5nIHdlIHdhbnQgdG8gd3JhcCBzb21lIGZ1bmN0aW9uPC9wPgo8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CmludCBmb28gKCBpbnQgeCwgaW50IHkgKSB7IHJldHVybiB4ICsgeTsgfTwvcHJlPgo8cD5BIHdyYXBwZXIgaXMgYSBmdW5jdGlvbiBvZiBpZGVudGljYWwgdHlwZSwgYnV0IHdpdGggYSBzcGVjaWFsIG5hbWUKd2hpY2ggaWRlbnRpZmllcyBpdCBhcyB0aGUgd3JhcHBlciBmb3IgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mb288L2NvZGU+LgpXcmFwcGVycyBuZWVkIHRvIGluY2x1ZGUKc3VwcG9ydGluZyBtYWNyb3MgZnJvbSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZhbGdyaW5kLmg8L2NvZGU+LgpIZXJlIGlzIGEgc2ltcGxlIHdyYXBwZXIgd2hpY2ggcHJpbnRzIHRoZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZTo8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICJ2YWxncmluZC5oIgppbnQgSV9XUkFQX1NPTkFNRV9GTk5BTUVfWlUoTk9ORSxmb28pKCBpbnQgeCwgaW50IHkgKQp7CiAgIGludCAgICByZXN1bHQ7CiAgIE9yaWdGbiBmbjsKICAgVkFMR1JJTkRfR0VUX09SSUdfRk4oZm4pOwogICBwcmludGYoImZvbydzIHdyYXBwZXI6IGFyZ3MgJWQgJWRcbiIsIHgsIHkpOwogICBDQUxMX0ZOX1dfV1cocmVzdWx0LCBmbiwgeCx5KTsKICAgcHJpbnRmKCJmb28ncyB3cmFwcGVyOiByZXN1bHQgJWRcbiIsIHJlc3VsdCk7CiAgIHJldHVybiByZXN1bHQ7Cn0KPC9wcmU+CjxwPlRvIGJlY29tZSBhY3RpdmUsIHRoZSB3cmFwcGVyIG1lcmVseSBuZWVkcyB0byBiZSBwcmVzZW50IGluIGEgdGV4dApzZWN0aW9uIHNvbWV3aGVyZSBpbiB0aGUgc2FtZSBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlIGFzIHRoZSBmdW5jdGlvbgppdCB3cmFwcywgYW5kIGZvciBpdHMgRUxGIHN5bWJvbCBuYW1lIHRvIGJlIHZpc2libGUgdG8gVmFsZ3JpbmQuICBJbgpwcmFjdGljZSwgdGhpcyBtZWFucyBlaXRoZXIgY29tcGlsaW5nIHRvIGEgCjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Lm88L2NvZGU+IGFuZCBsaW5raW5nIGl0IGluLCBvcgpjb21waWxpbmcgdG8gYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPi5zbzwvY29kZT4gYW5kIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkxEX1BSRUxPQUQ8L2NvZGU+aW5nIGl0IGluLiAgVGhlIGxhdHRlciBpcyBtb3JlCmNvbnZlbmllbnQgaW4gdGhhdCBpdCBkb2Vzbid0IHJlcXVpcmUgcmVsaW5raW5nLjwvcD4KPHA+QWxsIHdyYXBwZXJzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgYWJvdmUgZm9ybS4gIFRoZXJlIGFyZSB0aHJlZQpjcnVjaWFsIG1hY3Jvczo8L3A+CjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+SV9XUkFQX1NPTkFNRV9GTk5BTUVfWlU8L2NvZGU+OiAKdGhpcyBnZW5lcmF0ZXMgdGhlIHJlYWwgbmFtZSBvZiB0aGUgd3JhcHBlci4KVGhpcyBpcyBhbiBlbmNvZGVkIG5hbWUgd2hpY2ggVmFsZ3JpbmQgbm90aWNlcyB3aGVuIHJlYWRpbmcgc3ltYm9sCnRhYmxlIGluZm9ybWF0aW9uLiAgV2hhdCBpdCBzYXlzIGlzOiBJIGFtIHRoZSB3cmFwcGVyIGZvciBhbnkgZnVuY3Rpb24KbmFtZWQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mb288L2NvZGU+IHdoaWNoIGlzIGZvdW5kIGluIAphbiBFTEYgc2hhcmVkIG9iamVjdCB3aXRoIGFuIGVtcHR5CigiPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5OT05FPC9jb2RlPiIpIHNvbmFtZSBmaWVsZC4gIFRoZSBzcGVjaWZpY2F0aW9uIAptZWNoYW5pc20gaXMgcG93ZXJmdWwgaW4KdGhhdCB3aWxkY2FyZHMgYXJlIGFsbG93ZWQgZm9yIGJvdGggc29uYW1lcyBhbmQgZnVuY3Rpb24gbmFtZXMuICAKVGhlIGRldGFpbHMgYXJlIGRpc2N1c3NlZCBiZWxvdy48L3A+CjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+VkFMR1JJTkRfR0VUX09SSUdfRk48L2NvZGU+OiAKb25jZSBpbiB0aGUgd3JhcHBlciwgdGhlIGZpcnN0IHByaW9yaXR5IGlzCnRvIGdldCBob2xkIG9mIHRoZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hbCAoYW5kIGFueSBvdGhlciBzdXBwb3J0aW5nCmluZm9ybWF0aW9uIG5lZWRlZCkuICBUaGlzIGlzIHN0b3JlZCBpbiBhIHZhbHVlIG9mIG9wYXF1ZSAKdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPk9yaWdGbjwvY29kZT4uClRoZSBpbmZvcm1hdGlvbiBpcyBhY3F1aXJlZCB1c2luZyAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9HRVRfT1JJR19GTjwvY29kZT4uICBJdCBpcyBjcnVjaWFsCnRvIG1ha2UgdGhpcyBtYWNybyBjYWxsIGJlZm9yZSBjYWxsaW5nIGFueSBvdGhlciB3cmFwcGVkIGZ1bmN0aW9uCmluIHRoZSBzYW1lIHRocmVhZC48L3A+CjxwPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Q0FMTF9GTl9XX1dXPC9jb2RlPjogZXZlbnR1YWxseSB3ZSB3aWxsCndhbnQgdG8gY2FsbCB0aGUgZnVuY3Rpb24gYmVpbmcKd3JhcHBlZC4gIENhbGxpbmcgaXQgZGlyZWN0bHkgZG9lcyBub3Qgd29yaywgc2luY2UgdGhhdCBqdXN0IGdldHMgdXMKYmFjayB0byB0aGUgd3JhcHBlciBhbmQgbGVhZHMgdG8gYW4gaW5maW5pdGUgbG9vcC4gIEluc3RlYWQsIHRoZSByZXN1bHQKbHZhbHVlLCAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5PcmlnRm48L2NvZGU+IGFuZCBhcmd1bWVudHMgYXJlCmhhbmRlZCB0byBvbmUgb2YgYSBmYW1pbHkgb2YgbWFjcm9zIG9mIHRoZSBmb3JtIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkNBTExfRk5fKjwvY29kZT4uICBUaGVzZQpjYXVzZSBWYWxncmluZCB0byBjYWxsIHRoZSBvcmlnaW5hbCBhbmQgYXZvaWQgcmVjdXJzaW9uIGJhY2sgdG8gdGhlCndyYXBwZXIuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLnNwZWNzIj48L2E+My4zLjIuoFdyYXBwaW5nIFNwZWNpZmljYXRpb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+VGhpcyBzY2hlbWUgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgYmVpbmcgc2VsZi1jb250YWluZWQuICBBIGxpYnJhcnkgb2YKd3JhcHBlcnMgY2FuIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBjb2RlIGluIHRoZSBub3JtYWwgd2F5LCBhbmQgZG9lcwpub3QgcmVseSBvbiBhbiBleHRlcm5hbCBzY3JpcHQgdGVsbGluZyBWYWxncmluZCB3aGljaCB3cmFwcGVycyBwZXJ0YWluCnRvIHdoaWNoIG9yaWdpbmFscy48L3A+CjxwPkVhY2ggd3JhcHBlciBoYXMgYSBuYW1lIHdoaWNoLCBpbiB0aGUgbW9zdCBnZW5lcmFsIGNhc2Ugc2F5czogSSBhbSB0aGUKd3JhcHBlciBmb3IgYW55IGZ1bmN0aW9uIHdob3NlIG5hbWUgbWF0Y2hlcyBGTlBBVFQgYW5kIHdob3NlIEVMRgoic29uYW1lIiBtYXRjaGVzIFNPUEFUVC4gIEJvdGggRk5QQVRUIGFuZCBTT1BBVFQgbWF5IGNvbnRhaW4gd2lsZGNhcmRzCihhc3Rlcmlza3MpIGFuZCBvdGhlciBjaGFyYWN0ZXJzIChzcGFjZXMsIGRvdHMsIEAsIGV0Yykgd2hpY2ggYXJlIG5vdCAKZ2VuZXJhbGx5IHJlZ2FyZGVkIGFzIHZhbGlkIEMgaWRlbnRpZmllciBuYW1lcy48L3A+CjxwPlRoaXMgZmxleGliaWxpdHkgaXMgbmVlZGVkIHRvIHdyaXRlIHJvYnVzdCB3cmFwcGVycyBmb3IgUE9TSVggcHRocmVhZApmdW5jdGlvbnMsIHdoZXJlIHR5cGljYWxseSB3ZSBhcmUgbm90IGNvbXBsZXRlbHkgc3VyZSBvZiBlaXRoZXIgdGhlCmZ1bmN0aW9uIG5hbWUgb3IgdGhlIHNvbmFtZSwgb3IgYWx0ZXJuYXRpdmVseSB3ZSB3YW50IHRvIHdyYXAgYSB3aG9sZQpzZXQgb2YgZnVuY3Rpb25zIGF0IG9uY2UuPC9wPgo8cD5Gb3IgZXhhbXBsZSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5wdGhyZWFkX2NyZWF0ZTwvY29kZT4gCmluIEdOVSBsaWJwdGhyZWFkIGlzIHVzdWFsbHkgYQp2ZXJzaW9uZWQgc3ltYm9sIC0gb25lIHdob3NlIG5hbWUgZW5kcyBpbiwgZWcsIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkBHTElCQ18yLjM8L2NvZGU+LiAgSGVuY2Ugd2UKYXJlIG5vdCBzdXJlIHdoYXQgaXRzIHJlYWwgbmFtZSBpcy4gIFdlIGFsc28gd2FudCB0byBjb3ZlciBhbnkgc29uYW1lCm9mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+bGlicHRocmVhZC5zbyo8L2NvZGU+LgpTbyB0aGUgaGVhZGVyIG9mIHRoZSB3cmFwcGVyIHdpbGwgYmU8L3A+CjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KaW50IElfV1JBUF9TT05BTUVfRk5OQU1FX1paKGxpYnB0aHJlYWRaZHNvWmQwLHB0aHJlYWRadWNyZWF0ZVpBWmEpCiAgKCAuLi4gZm9ybWFscyAuLi4gKQogIHsgLi4uIGJvZHkgLi4uIH0KPC9wcmU+CjxwPkluIG9yZGVyIHRvIHdyaXRlIHVudXN1YWwgY2hhcmFjdGVycyBhcyB2YWxpZCBDIGZ1bmN0aW9uIG5hbWVzLCBhClotZW5jb2Rpbmcgc2NoZW1lIGlzIHVzZWQuICBOYW1lcyBhcmUgd3JpdHRlbiBsaXRlcmFsbHksIGV4Y2VwdCB0aGF0CmEgY2FwaXRhbCBaIGFjdHMgYXMgYW4gZXNjYXBlIGNoYXJhY3Rlciwgd2l0aCB0aGUgZm9sbG93aW5nIGVuY29kaW5nOjwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgogICAgIFphICAgZW5jb2RlcyAgICAqCiAgICAgWnAgICAgICAgICAgICAgICsKICAgICBaYyAgICAgICAgICAgICAgOgogICAgIFpkICAgICAgICAgICAgICAuCiAgICAgWnUgICAgICAgICAgICAgIF8KICAgICBaaCAgICAgICAgICAgICAgLQogICAgIFpzICAgICAgICAgICAgICAoc3BhY2UpCiAgICAgWkEgICAgICAgICAgICAgIEAKICAgICBaWiAgICAgICAgICAgICAgWgogICAgIFpMICAgICAgICAgICAgICAoICAgICAgICMgb25seSBpbiB2YWxncmluZCAzLjMuMCBhbmQgbGF0ZXIKICAgICBaUiAgICAgICAgICAgICAgKSAgICAgICAjIG9ubHkgaW4gdmFsZ3JpbmQgMy4zLjAgYW5kIGxhdGVyCjwvcHJlPgo8cD5IZW5jZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYnB0aHJlYWRaZHNvWmQwPC9jb2RlPiBpcyBhbiAKZW5jb2Rpbmcgb2YgdGhlIHNvbmFtZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYnB0aHJlYWQuc28uMDwvY29kZT4KYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cHRocmVhZFp1Y3JlYXRlWkFaYTwvY29kZT4gaXMgYW4gZW5jb2RpbmcgCm9mIHRoZSBmdW5jdGlvbiBuYW1lIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+cHRocmVhZF9jcmVhdGVAKjwvY29kZT4uCjwvcD4KPHA+VGhlIG1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+SV9XUkFQX1NPTkFNRV9GTk5BTUVfWlo8L2NvZGU+IApjb25zdHJ1Y3RzIGEgd3JhcHBlciBuYW1lIGluIHdoaWNoCmJvdGggdGhlIHNvbmFtZSAoZmlyc3QgY29tcG9uZW50KSBhbmQgZnVuY3Rpb24gbmFtZSAoc2Vjb25kIGNvbXBvbmVudCkKYXJlIFotZW5jb2RlZC4gIEVuY29kaW5nIHRoZSBmdW5jdGlvbiBuYW1lIGNhbiBiZSB0aXJlc29tZSBhbmQgaXMKb2Z0ZW4gdW5uZWNlc3NhcnksIHNvIGEgc2Vjb25kIG1hY3JvLAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPklfV1JBUF9TT05BTUVfRk5OQU1FX1pVPC9jb2RlPiwgY2FuIGJlCnVzZWQgaW5zdGVhZC4gIFRoZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPl9aVTwvY29kZT4gdmFyaWFudCBpcyAKYWxzbyB1c2VmdWwgZm9yIHdyaXRpbmcgd3JhcHBlcnMgZm9yCkMrKyBmdW5jdGlvbnMsIGluIHdoaWNoIHRoZSBmdW5jdGlvbiBuYW1lIGlzIHVzdWFsbHkgYWxyZWFkeSBtYW5nbGVkCnVzaW5nIHNvbWUgb3RoZXIgY29udmVudGlvbiBpbiB3aGljaCBaIHBsYXlzIGFuIGltcG9ydGFudCByb2xlLiAgSGF2aW5nCnRvIGVuY29kZSBhIHNlY29uZCB0aW1lIHF1aWNrbHkgYmVjb21lcyBjb25mdXNpbmcuPC9wPgo8cD5TaW5jZSB0aGUgZnVuY3Rpb24gbmFtZSBmaWVsZCBtYXkgY29udGFpbiB3aWxkY2FyZHMsIGl0IGNhbiBiZQphbnl0aGluZywgaW5jbHVkaW5nIGp1c3QgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4qPC9jb2RlPi4KVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIHNvbmFtZS4KSG93ZXZlciwgc29tZSBFTEYgb2JqZWN0cyAtIHNwZWNpZmljYWxseSwgbWFpbiBleGVjdXRhYmxlcyAtIGRvIG5vdApoYXZlIHNvbmFtZXMuICBBbnkgb2JqZWN0IGxhY2tpbmcgYSBzb25hbWUgaXMgdHJlYXRlZCBhcyBpZiBpdHMgc29uYW1lCndhcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPk5PTkU8L2NvZGU+LCB3aGljaCBpcyB3aHkgdGhlIG9yaWdpbmFsIApleGFtcGxlIGFib3ZlIGhhZCBhIG5hbWUKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5JX1dSQVBfU09OQU1FX0ZOTkFNRV9aVShOT05FLGZvbyk8L2NvZGU+LjwvcD4KPHA+Tm90ZSB0aGF0IHRoZSBzb25hbWUgb2YgYW4gRUxGIG9iamVjdCBpcyBub3QgdGhlIHNhbWUgYXMgaXRzCmZpbGUgbmFtZSwgYWx0aG91Z2ggaXQgaXMgb2Z0ZW4gc2ltaWxhci4gIFlvdSBjYW4gZmluZCB0aGUgc29uYW1lIG9mCmFuIG9iamVjdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxpYmZvby5zbzwvY29kZT4gdXNpbmcgdGhlIGNvbW1hbmQKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5yZWFkZWxmIC1hIGxpYmZvby5zbyB8IGdyZXAgc29uYW1lPC9jb2RlPi48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0MiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYud3JhcHBpbmcuc2VtYW50aWNzIj48L2E+My4zLjMuoFdyYXBwaW5nIFNlbWFudGljczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+CjxwPlRoZSBhYmlsaXR5IGZvciBhIHdyYXBwZXIgdG8gcmVwbGFjZSBhbiBpbmZpbml0ZSBmYW1pbHkgb2YgZnVuY3Rpb25zCmlzIHBvd2VyZnVsIGJ1dCBicmluZ3MgY29tcGxpY2F0aW9ucyBpbiBzaXR1YXRpb25zIHdoZXJlIEVMRiBvYmplY3RzCmFwcGVhciBhbmQgZGlzYXBwZWFyIChhcmUgZGxvcGVuJ2QgYW5kIGRsY2xvc2UnZCkgb24gdGhlIGZseS4KVmFsZ3JpbmQgdHJpZXMgdG8gbWFpbnRhaW4gc2Vuc2libGUgYmVoYXZpb3VyIGluIHN1Y2ggc2l0dWF0aW9ucy48L3A+CjxwPkZvciBleGFtcGxlLCBzdXBwb3NlIGEgcHJvY2VzcyBoYXMgZGxvcGVuZWQgKGFuIEVMRiBvYmplY3Qgd2l0aApzb25hbWUpIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+b2JqZWN0MS5zbzwvY29kZT4sIHdoaWNoIGNvbnRhaW5zIAo8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZ1bmN0aW9uMTwvY29kZT4uICBJdCBzdGFydHMgdG8gdXNlCjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnVuY3Rpb24xPC9jb2RlPiBpbW1lZGlhdGVseS48L3A+CjxwPkFmdGVyIGEgd2hpbGUgaXQgZGxvcGVucyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPndyYXBwZXJzLnNvPC9jb2RlPiwKd2hpY2ggY29udGFpbnMgYSB3cmFwcGVyCmZvciA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmZ1bmN0aW9uMTwvY29kZT4gaW4gKHNvbmFtZSkgCjxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+b2JqZWN0MS5zbzwvY29kZT4uICBBbGwgc3Vic2VxdWVudCBjYWxscyB0byAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5mdW5jdGlvbjE8L2NvZGU+IGFyZSByZXJvdXRlZCB0byB0aGUgd3JhcHBlci48L3A+CjxwPklmIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+d3JhcHBlcnMuc288L2NvZGU+IGlzIApsYXRlciBkbGNsb3NlJ2QsIGNhbGxzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZnVuY3Rpb24xPC9jb2RlPiBhcmUgCm5hdHVyYWxseSByb3V0ZWQgYmFjayB0byB0aGUgb3JpZ2luYWwuPC9wPgo8cD5BbHRlcm5hdGl2ZWx5LCBpZiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9iamVjdDEuc288L2NvZGU+CmlzIGRsY2xvc2UnZCBidXQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj53cmFwcGVycy5zbzwvY29kZT4gcmVtYWlucywKdGhlbiB0aGUgd3JhcHBlciBleHBvcnRlZCBieSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPndyYXBwZXJzLnNvPC9jb2RlPgpiZWNvbWVzIGluYWN0aXZlLCBzaW5jZSB0aGVyZQppcyBubyB3YXkgdG8gZ2V0IHRvIGl0IC0gdGhlcmUgaXMgbm8gb3JpZ2luYWwgdG8gY2FsbCBhbnkgbW9yZS4gIEhvd2V2ZXIsClZhbGdyaW5kIHJlbWVtYmVycyB0aGF0IHRoZSB3cmFwcGVyIGlzIHN0aWxsIHByZXNlbnQuICBJZiAKPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vYmplY3QxLnNvPC9jb2RlPiBpcwpldmVudHVhbGx5IGRsb3BlbidkIGFnYWluLCB0aGUgd3JhcHBlciB3aWxsIGJlY29tZSBhY3RpdmUgYWdhaW4uPC9wPgo8cD5JbiBzaG9ydCwgdmFsZ3JpbmQgaW5zcGVjdHMgYWxsIGNvZGUgbG9hZGluZy91bmxvYWRpbmcgZXZlbnRzIHRvCmVuc3VyZSB0aGF0IHRoZSBzZXQgb2YgY3VycmVudGx5IGFjdGl2ZSB3cmFwcGVycyByZW1haW5zIGNvbnNpc3RlbnQuPC9wPgo8cD5BIHNlY29uZCBwb3NzaWJsZSBwcm9ibGVtIGlzIHRoYXQgb2YgY29uZmxpY3Rpbmcgd3JhcHBlcnMuICBJdCBpcyAKZWFzaWx5IHBvc3NpYmxlIHRvIGxvYWQgdHdvIG9yIG1vcmUgd3JhcHBlcnMsIGJvdGggb2Ygd2hpY2ggY2xhaW0KdG8gYmUgd3JhcHBlcnMgZm9yIHNvbWUgdGhpcmQgZnVuY3Rpb24uICBJbiBzdWNoIGNhc2VzIFZhbGdyaW5kIHdpbGwKY29tcGxhaW4gYWJvdXQgY29uZmxpY3Rpbmcgd3JhcHBlcnMgd2hlbiB0aGUgc2Vjb25kIG9uZSBhcHBlYXJzLCBhbmQKd2lsbCBob25vdXIgb25seSB0aGUgZmlyc3Qgb25lLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNlY3QyIj4KPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+CjxhIG5hbWU9Im1hbnVhbC1jb3JlLWFkdi53cmFwcGluZy5kZWJ1Z2dpbmciPjwvYT4zLjMuNC6gRGVidWdnaW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+RmlndXJpbmcgb3V0IHdoYXQncyBnb2luZyBvbiBnaXZlbiB0aGUgZHluYW1pYyBuYXR1cmUgb2Ygd3JhcHBpbmcKY2FuIGJlIGRpZmZpY3VsdC4gIFRoZSAKPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10cmFjZS1yZWRpcj15ZXM8L2NvZGU+IG9wdGlvbiBtYWtlcyAKdGhpcyBwb3NzaWJsZQpieSBzaG93aW5nIHRoZSBjb21wbGV0ZSBzdGF0ZSBvZiB0aGUgcmVkaXJlY3Rpb24gc3Vic3lzdGVtIGFmdGVyCmV2ZXJ5Cjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bW1hcDwvY29kZT4vPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tdW5tYXA8L2NvZGU+CmV2ZW50IGFmZmVjdGluZyBjb2RlICh0ZXh0KS48L3A+CjxwPlRoZXJlIGFyZSB0d28gY2VudHJhbCBjb25jZXB0czo8L3A+CjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkEgInJlZGlyZWN0aW9uIHNwZWNpZmljYXRpb24iIGlzIGEgYmluZGluZyBvZiAKICBhIChzb25hbWUgcGF0dGVybiwgZm5uYW1lIHBhdHRlcm4pIHBhaXIgdG8gYSBjb2RlIGFkZHJlc3MuCiAgVGhlc2UgYmluZGluZ3MgYXJlIGNyZWF0ZWQgYnkgd3JpdGluZyBmdW5jdGlvbnMgd2l0aCBuYW1lcwogIG1hZGUgd2l0aCB0aGUgCiAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5JX1dSQVBfU09OQU1FX0ZOTkFNRV97WlosX1pVfTwvY29kZT4KICBtYWNyb3MuPC9wPjwvbGk+CjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkFuICJhY3RpdmUgcmVkaXJlY3Rpb24iIGlzIGEgY29kZS1hZGRyZXNzIHRvIAogIGNvZGUtYWRkcmVzcyBiaW5kaW5nIGN1cnJlbnRseSBpbiBlZmZlY3QuPC9wPjwvbGk+CjwvdWw+PC9kaXY+CjxwPlRoZSBzdGF0ZSBvZiB0aGUgd3JhcHBpbmctYW5kLXJlZGlyZWN0aW9uIHN1YnN5c3RlbSBjb21wcmlzZXMgYSBzZXQgb2YKc3BlY2lmaWNhdGlvbnMgYW5kIGEgc2V0IG9mIGFjdGl2ZSBiaW5kaW5ncy4gIFRoZSBzcGVjaWZpY2F0aW9ucyBhcmUKYWNxdWlyZWQvZGlzY2FyZGVkIGJ5IHdhdGNoaW5nIGFsbCAKPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tbWFwPC9jb2RlPi88Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm11bm1hcDwvY29kZT4KZXZlbnRzIG9uIGNvZGUgKHRleHQpCnNlY3Rpb25zLiAgVGhlIGFjdGl2ZSBiaW5kaW5nIHNldCBpcyAoY29uY2VwdHVhbGx5KSByZWNvbXB1dGVkIGZyb20KdGhlIHNwZWNpZmljYXRpb25zLCBhbmQgYWxsIGtub3duIHN5bWJvbCBuYW1lcywgZm9sbG93aW5nIGFueSBjaGFuZ2UKdG8gdGhlIHNwZWNpZmljYXRpb24gc2V0LjwvcD4KPHA+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10cmFjZS1yZWRpcj15ZXM8L2NvZGU+IHNob3dzIHRoZSBjb250ZW50cyAKb2YgYm90aCBzZXRzIGZvbGxvd2luZyBhbnkgc3VjaCBldmVudC48L3A+CjxwPjxjb2RlIGNsYXNzPSJvcHRpb24iPi12PC9jb2RlPiBwcmludHMgYSBsaW5lIG9mIHRleHQgZWFjaCAKdGltZSBhbiBhY3RpdmUgc3BlY2lmaWNhdGlvbiBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZS48L3A+CjxwPkhlbmNlIGZvciBtYXhpbXVtIGRlYnVnZ2luZyBlZmZlY3RpdmVuZXNzIHlvdSB3aWxsIG5lZWQgdG8gdXNlIGJvdGgKb3B0aW9ucy48L3A+CjxwPk9uZSBmaW5hbCBjb21tZW50LiAgVGhlIGZ1bmN0aW9uLXdyYXBwaW5nIGZhY2lsaXR5IGlzIGNsb3NlbHkKdGllZCB0byBWYWxncmluZCdzIGFiaWxpdHkgdG8gcmVwbGFjZSAocmVkaXJlY3QpIHNwZWNpZmllZApmdW5jdGlvbnMsIGZvciBleGFtcGxlIHRvIHJlZGlyZWN0IGNhbGxzIHRvIAo8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1hbGxvYzwvY29kZT4gdG8gaXRzCm93biBpbXBsZW1lbnRhdGlvbi4gIEluZGVlZCwgYSByZXBsYWNlbWVudCBmdW5jdGlvbiBjYW4gYmUKcmVnYXJkZWQgYXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgbm90IGNhbGwgdGhlIG9yaWdpbmFsLgpIb3dldmVyLCB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHJvYnVzdCwgdGhlIHR3byBraW5kcwpvZiBpbnRlcmNlcHRpb24gKHdyYXBwaW5nIHZzIHJlcGxhY2VtZW50KSBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4KPC9wPgo8cD48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRyYWNlLXJlZGlyPXllczwvY29kZT4gc2hvd3MgCnNwZWNpZmljYXRpb25zIGFuZCBiaW5kaW5ncyBmb3IgYm90aApyZXBsYWNlbWVudCBhbmQgd3JhcHBlciBmdW5jdGlvbnMuICBUbyBkaWZmZXJlbnRpYXRlIHRoZSAKdHdvLCByZXBsYWNlbWVudCBiaW5kaW5ncyBhcmUgcHJpbnRlZCB1c2luZyAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5SLSZndDs8L2NvZGU+IHdoZXJlYXMgCndyYXBzIGFyZSBwcmludGVkIHVzaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Vy0mZ3Q7PC9jb2RlPi4KPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdDIiPgo8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KPGEgbmFtZT0ibWFudWFsLWNvcmUtYWR2LndyYXBwaW5nLmxpbWl0YXRpb25zLWNmIj48L2E+My4zLjUuoExpbWl0YXRpb25zIC0gY29udHJvbCBmbG93PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KPHA+Rm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBmdW5jdGlvbiB3cmFwcGluZyBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QuClRoZSBvbmx5IGltcG9ydGFudCBjYXZlYXQgaXM6IGluIGEgd3JhcHBlciwgZ2V0IGhvbGQgb2YKdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+T3JpZ0ZuPC9jb2RlPiBpbmZvcm1hdGlvbiB1c2luZyAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5WQUxHUklORF9HRVRfT1JJR19GTjwvY29kZT4gYmVmb3JlIGNhbGxpbmcgYW55Cm90aGVyIHdyYXBwZWQgZnVuY3Rpb24uICBPbmNlIHlvdSBoYXZlIHRoZSAKPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5PcmlnRm48L2NvZGU+LCBhcmJpdHJhcnkKY2FsbHMgYmV0d2VlbiwgcmVjdXJzaW9uIGJldHdlZW4sIGFuZCBsb25nanVtcHMgb3V0IG9mIHdyYXBwZXJzCnNob3VsZCB3b3JrIGNvcnJlY3RseS4gIFRoZXJlIGlzIG5ldmVyIGFueSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHdyYXBwZWQKZnVuY3Rpb25zIGFuZCBtZXJlbHkgcmVwbGFjZWQgZnVuY3Rpb25zIAooZWcgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWxsb2M8L2NvZGU+KSwgc28geW91IGNhbiBjYWxsCjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bWFsbG9jPC9jb2RlPiBldGMgc2FmZWx5IGZyb20gd2l0aGluIHdyYXBwZXJzLgo8L3A+CjxwPlRoZSBhYm92ZSBjb21tZW50cyBhcmUgdHJ1ZSBmb3Ige3g4NixhbWQ2NCxwcGMzMixhcm0sbWlwczMyLHMzOTB9LWxpbnV4LgpPbgpwcGM2NC1saW51eCBmdW5jdGlvbiB3cmFwcGluZyBpcyBtb3JlIGZyYWdpbGUgZHVlIHRvIHRoZSAoYXJndWFibHkKcG9vcmx5IGRlc2lnbmVkKSBwcGM2NC1saW51eCBBQkkuICBUaGlzIG1hbmRhdGVzIHRoZSB1c2Ugb2YgYSBzaGFkb3cKc3RhY2sgd2hpY2ggdHJhY2tzIGVudHJpZXMvZXhpdHMgb2YgYm90aCB3cmFwcGVyIGFuZCByZXBsYWNlbWVudApmdW5jdGlvbnMuICBUaGlzIGdpdmVzIHR3byBsaW1pdGF0aW9uczogZmlyc3RseSwgbG9uZ2p1bXBpbmcgb3V0IG9mCndyYXBwZXJzIHdpbGwgcmFwaWRseSBsZWFkIHRvIGRpc2FzdGVyLCBzaW5jZSB0aGUgc2hhZG93IHN0YWNrIHdpbGwKbm90IGdldCBjb3JyZWN0bHkgY2xlYXJlZC4gIFNlY29uZGx5LCBzaW5jZSB0aGUgc2hhZG93IHN0YWNrIGhhcwpmaW5pdGUgc2l6ZSwgcmVjdXJzaW9uIGJldHdlZW4gd3JhcHBlci9yZXBsYWNlbWVudCBmdW5jdGlvbnMgaXMgb25seQpwb3NzaWJsZSB0byBhIGxpbWl0ZWQgZGVwdGgsIGJleW9uZCB3aGljaCBWYWxncmluZCBoYXMgdG8gYWJvcnQgdGhlCnJ1bi4gIFRoaXMgZGVwdGggaXMgY3VycmVudGx5IDE2IGNhbGxzLjwvcD4KPHA+Rm9yIGFsbCBwbGF0Zm9ybXMgKHt4ODYsYW1kNjQscHBjMzIscHBjNjQsYXJtLG1pcHMzMixzMzkwfS1saW51eCkKYWxsIHRoZSBhYm92ZQpjb21tZW50cyBhcHBseSBvbiBhIHBlci10aHJlYWQgYmFzaXMuICBJbiBvdGhlciB3b3Jkcywgd3JhcHBpbmcgaXMKdGhyZWFkLXNhZmU6IGVhY2ggdGhyZWFkIG11c3QgaW5kaXZpZHVhbGx5IG9ic2VydmUgdGhlIGFib3ZlCnJlc3RyaWN0aW9ucywgYnV0IHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueSBraW5kIG9mIGludGVyLXRocmVhZApjb29wZXJhdGlvbi48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0MiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYud3JhcHBpbmcubGltaXRhdGlvbnMtc2lncyI+PC9hPjMuMy42LqBMaW1pdGF0aW9ucyAtIG9yaWdpbmFsIGZ1bmN0aW9uIHNpZ25hdHVyZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD5BcyBzaG93biBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgdG8gY2FsbCB0aGUgb3JpZ2luYWwgeW91IG11c3QgdXNlIGEKbWFjcm8gb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij5DQUxMX0ZOXyo8L2NvZGU+LiAgCkZvciB0ZWNobmljYWwgcmVhc29ucyBpdCBpcyBpbXBvc3NpYmxlCnRvIGNyZWF0ZSBhIHNpbmdsZSBtYWNybyB0byBkZWFsIHdpdGggYWxsIGFyZ3VtZW50IHR5cGVzIGFuZCBudW1iZXJzLApzbyBhIGZhbWlseSBvZiBtYWNyb3MgY292ZXJpbmcgdGhlIG1vc3QgY29tbW9uIGNhc2VzIGlzIHN1cHBsaWVkLiAgSW4Kd2hhdCBmb2xsb3dzLCAnVycgZGVub3RlcyBhIG1hY2hpbmUtd29yZC10eXBlZCB2YWx1ZSAoYSBwb2ludGVyIG9yIGEKQyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmxvbmc8L2NvZGU+KSwgCmFuZCAndicgZGVub3RlcyBDJ3MgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij52b2lkPC9jb2RlPiB0eXBlLgpUaGUgY3VycmVudGx5IGF2YWlsYWJsZSBtYWNyb3MgYXJlOjwvcD4KPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgpDQUxMX0ZOX3ZfdiAgICAtLSBjYWxsIGFuIG9yaWdpbmFsIG9mIHR5cGUgIHZvaWQgZm4gKCB2b2lkICkKQ0FMTF9GTl9XX3YgICAgLS0gY2FsbCBhbiBvcmlnaW5hbCBvZiB0eXBlICBsb25nIGZuICggdm9pZCApCgpDQUxMX0ZOX3ZfVyAgICAtLSBjYWxsIGFuIG9yaWdpbmFsIG9mIHR5cGUgIHZvaWQgZm4gKCBsb25nICkKQ0FMTF9GTl9XX1cgICAgLS0gY2FsbCBhbiBvcmlnaW5hbCBvZiB0eXBlICBsb25nIGZuICggbG9uZyApCgpDQUxMX0ZOX3ZfV1cgICAtLSBjYWxsIGFuIG9yaWdpbmFsIG9mIHR5cGUgIHZvaWQgZm4gKCBsb25nLCBsb25nICkKQ0FMTF9GTl9XX1dXICAgLS0gY2FsbCBhbiBvcmlnaW5hbCBvZiB0eXBlICBsb25nIGZuICggbG9uZywgbG9uZyApCgpDQUxMX0ZOX3ZfV1dXICAtLSBjYWxsIGFuIG9yaWdpbmFsIG9mIHR5cGUgIHZvaWQgZm4gKCBsb25nLCBsb25nLCBsb25nICkKQ0FMTF9GTl9XX1dXVyAgLS0gY2FsbCBhbiBvcmlnaW5hbCBvZiB0eXBlICBsb25nIGZuICggbG9uZywgbG9uZywgbG9uZyApCgpDQUxMX0ZOX1dfV1dXVyAtLSBjYWxsIGFuIG9yaWdpbmFsIG9mIHR5cGUgIGxvbmcgZm4gKCBsb25nLCBsb25nLCBsb25nLCBsb25nICkKQ0FMTF9GTl9XXzVXICAgLS0gY2FsbCBhbiBvcmlnaW5hbCBvZiB0eXBlICBsb25nIGZuICggbG9uZywgbG9uZywgbG9uZywgbG9uZywgbG9uZyApCkNBTExfRk5fV182VyAgIC0tIGNhbGwgYW4gb3JpZ2luYWwgb2YgdHlwZSAgbG9uZyBmbiAoIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcsIGxvbmcgKQphbmQgc28gb24sIHVwIHRvIApDQUxMX0ZOX1dfMTJXCjwvcHJlPgo8cD5UaGUgc2V0IG9mIHN1cHBvcnRlZCB0eXBlcyBjYW4gYmUgZXhwYW5kZWQgYXMgbmVlZGVkLiAgSXQgaXMKcmVncmV0dGFibGUgdGhhdCB0aGlzIGxpbWl0YXRpb24gZXhpc3RzLiAgRnVuY3Rpb24gd3JhcHBpbmcgaGFzIHByb3ZlbgpkaWZmaWN1bHQgdG8gaW1wbGVtZW50LCB3aXRoIGEgY2VydGFpbiBhcHBhcmVudGx5IHVuYXZvaWRhYmxlIGxldmVsIG9mCmlja2luZXNzLiAgQWZ0ZXIgc2V2ZXJhbCBpbXBsZW1lbnRhdGlvbiBhdHRlbXB0cywgdGhlIHByZXNlbnQKYXJyYW5nZW1lbnQgYXBwZWFycyB0byBiZSB0aGUgbGVhc3Qtd29yc3QgdHJhZGVvZmYuICBBdCBsZWFzdCBpdCB3b3JrcwpyZWxpYWJseSBpbiB0aGUgcHJlc2VuY2Ugb2YgZHluYW1pYyBsaW5raW5nIGFuZCBkeW5hbWljIGNvZGUKbG9hZGluZy91bmxvYWRpbmcuPC9wPgo8cD5Zb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHdyYXAgYSBmdW5jdGlvbiBvZiBvbmUgdHlwZSBzaWduYXR1cmUgd2l0aCBhCndyYXBwZXIgb2YgYSBkaWZmZXJlbnQgdHlwZSBzaWduYXR1cmUuICBTdWNoIHRyaWNrZXJ5IHdpbGwgc3VyZWx5IGxlYWQKdG8gY3Jhc2hlcyBvciBzdHJhbmdlIGJlaGF2aW91ci4gIFRoaXMgaXMgbm90IGEgbGltaXRhdGlvbgpvZiB0aGUgZnVuY3Rpb24gd3JhcHBpbmcgaW1wbGVtZW50YXRpb24sIG1lcmVseSBhIHJlZmxlY3Rpb24gb2YgdGhlCmZhY3QgdGhhdCBpdCBnaXZlcyB5b3Ugc3dlZXBpbmcgcG93ZXJzIHRvIHNob290IHlvdXJzZWxmIGluIHRoZSBmb290CmlmIHlvdSBhcmUgbm90IGNhcmVmdWwuICBJbWFnaW5lIHRoZSBpbnN0YW50IGhhdm9jIHlvdSBjb3VsZCB3cmVhayBieQp3cml0aW5nIGEgd3JhcHBlciB3aGljaCBtYXRjaGVkIGFueSBmdW5jdGlvbiBuYW1lIGluIGFueSBzb25hbWUgLSBpbgplZmZlY3QsIG9uZSB3aGljaCBjbGFpbWVkIHRvIGJlIGEgd3JhcHBlciBmb3IgYWxsIGZ1bmN0aW9ucyBpbiB0aGUKcHJvY2Vzcy48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0MiI+CjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgo8YSBuYW1lPSJtYW51YWwtY29yZS1hZHYud3JhcHBpbmcuZXhhbXBsZXMiPjwvYT4zLjMuNy6gRXhhbXBsZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2Pgo8cD5JbiB0aGUgc291cmNlIHRyZWUsIAo8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm1lbWNoZWNrL3Rlc3RzL3dyYXBbMS04XS5jPC9jb2RlPiBwcm92aWRlIGEgc2VyaWVzIG9mCmV4YW1wbGVzLCByYW5naW5nIGZyb20gdmVyeSBzaW1wbGUgdG8gcXVpdGUgYWR2YW5jZWQuPC9wPgo8cD48Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm1waS9saWJtcGl3cmFwLmM8L2NvZGU+IGlzIGFuIGV4YW1wbGUgCm9mIHdyYXBwaW5nIGEgYmlnLCBjb21wbGV4IEFQSSAodGhlIE1QSS0yIGludGVyZmFjZSkuICBUaGlzIGZpbGUgZGVmaW5lcyAKYWxtb3N0IDMwMCBkaWZmZXJlbnQgd3JhcHBlcnMuPC9wPgo8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8ZGl2Pgo8YnI+PHRhYmxlIGNsYXNzPSJuYXYiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjIiIGJvcmRlcj0iMCIgc3VtbWFyeT0iTmF2aWdhdGlvbiBmb290ZXIiPgo8dHI+Cjx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iNDAlIiBhbGlnbj0ibGVmdCI+CjxhIGFjY2Vzc2tleT0icCIgaHJlZj0ibWFudWFsLWNvcmUuaHRtbCI+Jmx0OyZsdDugMi6gVXNpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIFZhbGdyaW5kIGNvcmU8L2E+oDwvdGQ+Cjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0iY2VudGVyIj48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Im1hbnVhbC5odG1sIj5VcDwvYT48L3RkPgo8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjQwJSIgYWxpZ249InJpZ2h0Ij6gPGEgYWNjZXNza2V5PSJuIiBocmVmPSJtYy1tYW51YWwuaHRtbCI+NC6gTWVtY2hlY2s6IGEgbWVtb3J5IGVycm9yIGRldGVjdG9yoCZndDsmZ3Q7PC9hPgo8L3RkPgo8L3RyPgo8dHI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPjwvdHI+CjwvdGFibGU+CjwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K