PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9zbyAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi4xPC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLmdpZiIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy1wcm9qZWN0LyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi4xPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Nb2R1bGVzPC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPgo8ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkFwYWNoZSBNb2R1bGUgbW9kX3NvPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3NvLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX3NvLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9zby5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TG9hZGluZyBvZiBleGVjdXRhYmxlIGNvZGUgYW5kCm1vZHVsZXMgaW50byB0aGUgc2VydmVyIGF0IHN0YXJ0LXVwIG9yIHJlc3RhcnQgdGltZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+c29fbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9zby5jPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+VGhpcyBpcyBhIEJhc2UgbW9kdWxlIChhbHdheXMgaW5jbHVkZWQpIG9uIApXaW5kb3dzPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCgogICAgPHA+T24gc2VsZWN0ZWQgb3BlcmF0aW5nIHN5c3RlbXMgdGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgdG8KICAgIGxvYWQgbW9kdWxlcyBpbnRvIEFwYWNoZSBhdCBydW50aW1lIHZpYSB0aGUgPGEgaHJlZj0iLi4vZHNvLmh0bWwiPkR5bmFtaWMgU2hhcmVkIE9iamVjdDwvYT4gKERTTykgbWVjaGFuaXNtLAogICAgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGEgcmVjb21waWxhdGlvbi48L3A+CgogICAgPHA+T24gVW5peCwgdGhlIGxvYWRlZCBjb2RlIHR5cGljYWxseSBjb21lcyBmcm9tIHNoYXJlZCBvYmplY3QKICAgIGZpbGVzICh1c3VhbGx5IHdpdGggPGNvZGU+LnNvPC9jb2RlPiBleHRlbnNpb24pLCBvbiBXaW5kb3dzCiAgICB0aGlzIG1heSBlaXRoZXIgdGhlIDxjb2RlPi5zbzwvY29kZT4gb3IgPGNvZGU+LmRsbDwvY29kZT4KICAgIGV4dGVuc2lvbi48L3A+CgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPldhcm5pbmc8L2gzPgogICAgPHA+QXBhY2hlIDEuMyBtb2R1bGVzIGNhbm5vdCBiZSBkaXJlY3RseSB1c2VkCiAgICB3aXRoIEFwYWNoZSAyLjAgLSB0aGUgbW9kdWxlIG11c3QgYmUgbW9kaWZpZWQgdG8gZHluYW1pY2FsbHkKICAgIGxvYWQgb3IgY29tcGlsZSBpbnRvIEFwYWNoZSAyLjAuPC9wPgogICAgPC9kaXY+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+Cjx1bCBpZD0idG9jIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbG9hZGZpbGUiPkxvYWRGaWxlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xvYWRtb2R1bGUiPkxvYWRNb2R1bGU8L2E+PC9saT4KPC91bD4KPGgzPlRvcGljczwvaDM+Cjx1bCBpZD0idG9waWNzIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjd2luZG93cyI+Q3JlYXRpbmcgTG9hZGFibGUgTW9kdWxlcyBmb3IgV2luZG93czwvYT48L2xpPgo8L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ3aW5kb3dzIiBpZD0id2luZG93cyI+Q3JlYXRpbmcgTG9hZGFibGUgTW9kdWxlcyBmb3IgV2luZG93czwvYT48L2gyPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgIDxwPlRoZSBtb2R1bGUgbmFtZSBmb3JtYXQgY2hhbmdlZCBmb3IgV2luZG93cwogICAgd2l0aCBBcGFjaGUgMS4zLjE1IGFuZCAyLjAgLSB0aGUgbW9kdWxlcyBhcmUgbm93IG5hbWVkIGFzCiAgICBtb2RfZm9vLnNvPC9wPgoKICAgIDxwPldoaWxlIG1vZF9zbyBzdGlsbCBsb2FkcyBtb2R1bGVzIHdpdGgKICAgIEFwYWNoZU1vZHVsZUZvby5kbGwgbmFtZXMsIHRoZSBuZXcgbmFtaW5nIGNvbnZlbnRpb24gaXMKICAgIHByZWZlcnJlZDsgaWYgeW91IGFyZSBjb252ZXJ0aW5nIHlvdXIgbG9hZGFibGUgbW9kdWxlIGZvciAyLjAsCiAgICBwbGVhc2UgZml4IHRoZSBuYW1lIHRvIHRoaXMgMi4wIGNvbnZlbnRpb24uPC9wPjwvZGl2PgoKICAgIDxwPlRoZSBBcGFjaGUgbW9kdWxlIEFQSSBpcyB1bmNoYW5nZWQgYmV0d2VlbiB0aGUgVW5peCBhbmQKICAgIFdpbmRvd3MgdmVyc2lvbnMuIE1hbnkgbW9kdWxlcyB3aWxsIHJ1biBvbiBXaW5kb3dzIHdpdGggbm8gb3IKICAgIGxpdHRsZSBjaGFuZ2UgZnJvbSBVbml4LCBhbHRob3VnaCBvdGhlcnMgcmVseSBvbiBhc3BlY3RzIG9mIHRoZQogICAgVW5peCBhcmNoaXRlY3R1cmUgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIFdpbmRvd3MsIGFuZCB3aWxsCiAgICBub3Qgd29yay48L3A+CgogICAgPHA+V2hlbiBhIG1vZHVsZSBkb2VzIHdvcmssIGl0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VydmVyIGluCiAgICBvbmUgb2YgdHdvIHdheXMuIEFzIHdpdGggVW5peCwgaXQgY2FuIGJlIGNvbXBpbGVkIGludG8gdGhlCiAgICBzZXJ2ZXIuIEJlY2F1c2UgQXBhY2hlIGZvciBXaW5kb3dzIGRvZXMgbm90IGhhdmUgdGhlCiAgICA8Y29kZT5Db25maWd1cmU8L2NvZGU+IHByb2dyYW0gb2YgQXBhY2hlIGZvciBVbml4LCB0aGUgbW9kdWxlJ3MKICAgIHNvdXJjZSBmaWxlIG11c3QgYmUgYWRkZWQgdG8gdGhlIEFwYWNoZUNvcmUgcHJvamVjdCBmaWxlLCBhbmQKICAgIGl0cyBzeW1ib2xzIG11c3QgYmUgYWRkZWQgdG8gdGhlCiAgICA8Y29kZT5vc1x3aW4zMlxtb2R1bGVzLmM8L2NvZGU+IGZpbGUuPC9wPgoKICAgIDxwPlRoZSBzZWNvbmQgd2F5IGlzIHRvIGNvbXBpbGUgdGhlIG1vZHVsZSBhcyBhIERMTCwgYSBzaGFyZWQKICAgIGxpYnJhcnkgdGhhdCBjYW4gYmUgbG9hZGVkIGludG8gdGhlIHNlcnZlciBhdCBydW50aW1lLCB1c2luZwogICAgdGhlIDxjb2RlPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxvYWRNb2R1bGU8L2NvZGU+PC9jb2RlPgogICAgZGlyZWN0aXZlLiBUaGVzZSBtb2R1bGUgRExMcyBjYW4gYmUgZGlzdHJpYnV0ZWQgYW5kIHJ1biBvbiBhbnkKICAgIEFwYWNoZSBmb3IgV2luZG93cyBpbnN0YWxsYXRpb24sIHdpdGhvdXQgcmVjb21waWxhdGlvbiBvZiB0aGUKICAgIHNlcnZlci48L3A+CgogICAgPHA+VG8gY3JlYXRlIGEgbW9kdWxlIERMTCwgYSBzbWFsbCBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIHRoZQogICAgbW9kdWxlJ3Mgc291cmNlIGZpbGU6IFRoZSBtb2R1bGUgcmVjb3JkIG11c3QgYmUgZXhwb3J0ZWQgZnJvbQogICAgdGhlIERMTCAod2hpY2ggd2lsbCBiZSBjcmVhdGVkIGxhdGVyOyBzZWUgYmVsb3cpLiBUbyBkbyB0aGlzLAogICAgYWRkIHRoZSA8Y29kZT5BUF9NT0RVTEVfREVDTEFSRV9EQVRBPC9jb2RlPiAoZGVmaW5lZCBpbiB0aGUKICAgIEFwYWNoZSBoZWFkZXIgZmlsZXMpIHRvIHlvdXIgbW9kdWxlJ3MgbW9kdWxlIHJlY29yZCBkZWZpbml0aW9uLgogICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgbW9kdWxlIGhhczo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIG1vZHVsZSBmb29fbW9kdWxlOwo8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlJlcGxhY2UgdGhlIGFib3ZlIHdpdGg6PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIG1vZHVsZSBBUF9NT0RVTEVfREVDTEFSRV9EQVRBIGZvb19tb2R1bGU7CjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+Tm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IGJlIGFjdGl2YXRlZCBvbiBXaW5kb3dzLCBzbyB0aGUKICAgIG1vZHVsZSBjYW4gY29udGludWUgdG8gYmUgdXNlZCwgdW5jaGFuZ2VkLCB3aXRoIFVuaXggaWYgbmVlZGVkLgogICAgQWxzbywgaWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIDxjb2RlPi5ERUY8L2NvZGU+IGZpbGVzLCB5b3UgY2FuCiAgICBleHBvcnQgdGhlIG1vZHVsZSByZWNvcmQgd2l0aCB0aGF0IG1ldGhvZCBpbnN0ZWFkLjwvcD4KCiAgICA8cD5Ob3csIGNyZWF0ZSBhIERMTCBjb250YWluaW5nIHlvdXIgbW9kdWxlLiBZb3Ugd2lsbCBuZWVkIHRvCiAgICBsaW5rIHRoaXMgYWdhaW5zdCB0aGUgbGliaHR0cGQubGliIGV4cG9ydCBsaWJyYXJ5IHRoYXQgaXMKICAgIGNyZWF0ZWQgd2hlbiB0aGUgbGliaHR0cGQuZGxsIHNoYXJlZCBsaWJyYXJ5IGlzIGNvbXBpbGVkLiBZb3UKICAgIG1heSBhbHNvIGhhdmUgdG8gY2hhbmdlIHRoZSBjb21waWxlciBzZXR0aW5ncyB0byBlbnN1cmUgdGhhdAogICAgdGhlIEFwYWNoZSBoZWFkZXIgZmlsZXMgYXJlIGNvcnJlY3RseSBsb2NhdGVkLiBZb3UgY2FuIGZpbmQKICAgIHRoaXMgbGlicmFyeSBpbiB5b3VyIHNlcnZlciByb290J3MgbW9kdWxlcyBkaXJlY3RvcnkuIEl0IGlzCiAgICBiZXN0IHRvIGdyYWIgYW4gZXhpc3RpbmcgbW9kdWxlIC5kc3AgZmlsZSBmcm9tIHRoZSB0cmVlIHRvCiAgICBhc3N1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBvcgogICAgYWx0ZXJuYXRlbHkgY29tcGFyZSB0aGUgY29tcGlsZXIgYW5kIGxpbmsgb3B0aW9ucyB0byB5b3VyCiAgICAuZHNwLjwvcD4KCiAgICA8cD5UaGlzIHNob3VsZCBjcmVhdGUgYSBETEwgdmVyc2lvbiBvZiB5b3VyIG1vZHVsZS4gTm93IHNpbXBseQogICAgcGxhY2UgaXQgaW4gdGhlIDxjb2RlPm1vZHVsZXM8L2NvZGU+IGRpcmVjdG9yeSBvZiB5b3VyIHNlcnZlcgogICAgcm9vdCwgYW5kIHVzZSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9hZE1vZHVsZTwvY29kZT4KICAgIGRpcmVjdGl2ZSB0byBsb2FkIGl0LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMb2FkRmlsZSIgaWQ9IkxvYWRGaWxlIj5Mb2FkRmlsZTwvYT4gPGEgbmFtZT0ibG9hZGZpbGUiIGlkPSJsb2FkZmlsZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TGluayBpbiB0aGUgbmFtZWQgb2JqZWN0IGZpbGUgb3IgbGlicmFyeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Mb2FkRmlsZSA8ZW0+ZmlsZW5hbWU8L2VtPiBbPGVtPmZpbGVuYW1lPC9lbT5dIC4uLjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2Rfc288L3RkPjwvdHI+CjwvdGFibGU+CgogICAgPHA+VGhlIExvYWRGaWxlIGRpcmVjdGl2ZSBsaW5rcyBpbiB0aGUgbmFtZWQgb2JqZWN0IGZpbGVzIG9yCiAgICBsaWJyYXJpZXMgd2hlbiB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQgb3IgcmVzdGFydGVkOyB0aGlzIGlzIHVzZWQKICAgIHRvIGxvYWQgYWRkaXRpb25hbCBjb2RlIHdoaWNoIG1heSBiZSByZXF1aXJlZCBmb3Igc29tZSBtb2R1bGUKICAgIHRvIHdvcmsuIDxlbT5GaWxlbmFtZTwvZW0+IGlzIGVpdGhlciBhbiBhYnNvbHV0ZSBwYXRoIG9yCiAgICByZWxhdGl2ZSB0byA8YSBocmVmPSJjb3JlLmh0bWwjc2VydmVycm9vdCI+U2VydmVyUm9vdDwvYT4uPC9wPgoKICAgIDxwPkZvciBleGFtcGxlOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT5Mb2FkRmlsZSBsaWJleGVjL2xpYnhtbHBhcnNlLnNvPC9jb2RlPjwvcD48L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTG9hZE1vZHVsZSIgaWQ9IkxvYWRNb2R1bGUiPkxvYWRNb2R1bGU8L2E+IDxhIG5hbWU9ImxvYWRtb2R1bGUiIGlkPSJsb2FkbW9kdWxlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5MaW5rcyBpbiB0aGUgb2JqZWN0IGZpbGUgb3IgbGlicmFyeSwgYW5kIGFkZHMgdG8gdGhlIGxpc3QKb2YgYWN0aXZlIG1vZHVsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+TG9hZE1vZHVsZSA8ZW0+bW9kdWxlIGZpbGVuYW1lPC9lbT48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3NvPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIExvYWRNb2R1bGUgZGlyZWN0aXZlIGxpbmtzIGluIHRoZSBvYmplY3QgZmlsZSBvciBsaWJyYXJ5CiAgICA8ZW0+ZmlsZW5hbWU8L2VtPiBhbmQgYWRkcyB0aGUgbW9kdWxlIHN0cnVjdHVyZSBuYW1lZAogICAgPGVtPm1vZHVsZTwvZW0+IHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBtb2R1bGVzLiA8ZW0+TW9kdWxlPC9lbT4KICAgIGlzIHRoZSBuYW1lIG9mIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBvZiB0eXBlCiAgICA8Y29kZT5tb2R1bGU8L2NvZGU+IGluIHRoZSBmaWxlLCBhbmQgaXMgbGlzdGVkIGFzIHRoZSA8YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZSBJZGVudGlmaWVyPC9hPgogICAgaW4gdGhlIG1vZHVsZSBkb2N1bWVudGF0aW9uLiBFeGFtcGxlOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgTG9hZE1vZHVsZSBzdGF0dXNfbW9kdWxlIG1vZHVsZXMvbW9kX3N0YXR1cy5zbwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5sb2FkcyB0aGUgbmFtZWQgbW9kdWxlIGZyb20gdGhlIG1vZHVsZXMgc3ViZGlyZWN0b3J5IG9mIHRoZQogICAgU2VydmVyUm9vdC48L3A+Cgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9zby5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9zby5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL21vZC9tb2Rfc28uaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMTk5OS0yMDA0IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=