PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPgo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNPTlRFTlQtVFlQRSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgo8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9Ik5pa29sYWkgUHJldHplbGwiPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNlciBndWlkZSBmb3IgZG9jdW1lbnRpbmcgd2l0aCBBdXRvZG9jLSI+Cjx0aXRsZT5Ib3cgdG8gV3JpdGUgQysrIFNvdXJjZSBDb2RlIERvY3VtZW50YXRpb24gZm9yIEF1dG9kb2M8L3RpdGxlPgo8c3R5bGU+Cgk8IS0tCgkJQHBhZ2UgeyBtYXJnaW46IDJjbSB9CgkJSDUgeyBtYXJnaW4tYm90dG9tOiA0cHQ7IGZvbnQtZmFtaWx5OiAiQXJpYWwiLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDExcHQ7IH0KCQlIMyB7IG1hcmdpbi1ib3R0b206IDRwdDsgZm9udC1mYW1pbHk6ICJBcmlhbCIsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTNwdDsgfQoJCVREIHsgbWFyZ2luLWJvdHRvbTogNHB0OyB9CgkJSDEgeyBtYXJnaW4tYm90dG9tOiAyMHB0OyBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNnB0IH0KCQlQICB7IG1hcmdpbi10b3A6MnB0OyBtYXJnaW4tYm90dG9tOiAycHQgfQoJLS0+Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+Cgo8ZGl2IGFsaWduPSJjZW50ZXIiPgo8aDE+SG93IHRvIFdyaXRlIEMrKyBTb3VyY2UgQ29kZSBEb2N1bWVudGF0aW9uIGZvciBBdXRvZG9jPC9oMT4KPC9kaXY+CjxkaXYgYWxpZ249InJpZ2h0Ij48Yj4gTGFzdCB1cGRhdGVkOiBKYW51YXJ5IDE0IDIwMDU8L2I+PGJyPgo8L2Rpdj4KCjxkaXYgYWxpZ249InJpZ2h0Ij4KICAgIDxmb250IHNpemU9IjMiPgogICAgPGI+Q29udGFjdDogPC9iPgogICAgPGEgaHJlZj0ibWFpbHRvOm5pa29sYWlAc3VuLmNvbSI+Tmlrb2xhaSBQcmV0emVsbDwvYT4KICAgPC9mb250Pgo8L2Rpdj4KCjxoNT5Db250ZW50PC9oNT4KPHAgc3R5bGU9Im1hcmdpbi10b3A6MnB0OyBtYXJnaW4tYm90dG9tOjIwcHQ7Ij4KPGEgaHJlZj0iI2Jhc2ljIj5CYXNpYyBSdWxlczwvYT48YnI+CjxhIGhyZWY9IiN3aGF0Ij5XaGF0IGNhbiBiZSBkb2N1bWVudGVkPC9hPjxicj4KPGEgaHJlZj0iI2xheW91dCI+TGF5b3V0PC9hPjxicj4KPGEgaHJlZj0iI3RhZ3MiPlRhZ3M8L2E+PGJyPgo8YSBocmVmPSIjdF9jb21tb24iIHN0eWxlPSJtYXJnaW4tbGVmdDoxMnB0OyI+Q29tbW9uIFRhZ3M8L2E+PGJyPgo8YSBocmVmPSIjdF9jbGFzcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEycHQ7Ij5UYWdzIGZvciBDbGFzc2VzPC9hPjxicj4KPGEgaHJlZj0iI3RfZnVuY3QiIHN0eWxlPSJtYXJnaW4tbGVmdDoxMnB0OyI+VGFncyBmb3IgRnVuY3Rpb25zPC9hPjxicj4KPGEgaHJlZj0iI3RfdmFyIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTJwdDsiPlRhZ3MgZm9yIFZhcmlhYmxlczwvYT48YnI+CjxhIGhyZWY9IiN0X2dsb2JhbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEycHQ7Ij5HbG9iYWwgVGFnczwvYT48YnI+CjxhIGhyZWY9IiN0eXBpYyI+QSBUeXBpY2FsIERvY3VtZW50YXRpb248L2E+PGJyPgo8L3A+CgoKPGgzPlNjb3BlPC9oMz4KCjxwPlRoaXMgaXMgYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gd3JpdGUgZG9jdW1lbnRhdGlvbiB3aXRoaW4gQysrIGNvZGUgc3VjaAppdCBjYW4gYmUgYXV0b21hdGljYWxseSBwYXJzZWQgYnkgdGhlIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24gdG9vbApBdXRvZG9jLgo8L3A+Cgo8aDM+PGEgbmFtZT0iYmFzaWMiPkJhc2ljIFJ1bGVzPC9hPjwvaDM+Cgo8dWw+CiAgICA8bGk+CiAgICA8cD5UaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXMgdG8gcHV0IGRvY3VtZW50YXRpb24gaW4gYSBDKysgZmlsZTo8YnI+CiAgICAgICBNdWx0aSBsaW5lIGRvY3VtZW50YXRpb24gc3RhcnRzIHdpdGggPHNwYW4gc3R5bGU9IiI+PGZvbnQgZmFjZT0iQ291cmllciBOZXcsIG1vbm9zcGFjZSI+CiAgICAgICAvKio8L2ZvbnQ+PC9zcGFuPiBhbmQgZW5kcyB3aXRoIDxzcGFuIHN0eWxlPSIiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3LCBtb25vc3BhY2UiPgogICAgICAgKi88L2ZvbnQ+PC9zcGFuPiBzbyBpdCBsb29rcyBsaWtlIHRoaXM6CiAgICA8L3A+CiAgICA8cHJlPi8qKiBTb21lIHRleHQKICAgIC4uLi4uLi4uLi4uLi4uLi4uCiAgICAuLi4uLi4uLi4uLi4uLi4uLgoqLzwvcHJlPgoKICAgIDxwPiBTaW5nbGUgbGluZSBvciAmIzgyMjA7aW5saW5lJiM4MjIxOyBkb2N1bWVudGF0aW9uIHN0YXJ0cyB3aXRoCiAgICAgICAgPGZvbnQgZmFjZT0iQ291cmllciBOZXcsIG1vbm9zcGFjZSI+CiAgICAgICAgLy8vIDwvZm9udD4KICAgICAgICBhbmQgZW5kcyB3aXRoIHRoZSBsaW5lLCAgc28gIGl0IGxvb2tzCiAgICAgICAgbGlrZSB0aGlzOgogICAgPC9wPgogICAgPHByZT4vLy8gIFNvbWUgdGV4dCAuLi4uLi4uPC9wcmU+CgogICAgPHA+QSAmIzgyMjA7ZG9jdW1lbnRhdGlvbiBwYXJhZ3JhcGgmIzgyMjE7IHdlIGNhbGwgYW55IG9mIHRoZSB0d28KICAgICAgIGp1c3QgZGVzY3JpYmVkIGRvY3VtZW50YXRpb24gYmxvY2tzLiA8L3A+CiAgICA8L2xpPgogICAgPGxpPlRoZSBsYW5ndWFnZSBvZiBkb2N1bWVudGF0aW9uIGlzIEVuZ2xpc2guPC9saT4KICAgIDxsaT5TbyBmYXIsIG9ubHkgaGVhZGVyIGZpbGVzIGFyZSBwYXJzZWQgYnkgQXV0b2RvYy48L2xpPgogICAgPGxpPkZvciBtb3N0IHR5cGljYWwgdXNlcywgdGhlIGRvY3VtZW50YXRpb24gc3R5bGUgaXMgY29tcGF0aWJsZSB0bwogICAgICAgIEphdmFkb2MuPGJyPgogICAgICAgIE9ubHkgeW91IGNhbiBub3QgdXNlIHRoZSBsZWZ0c2lkZSAqLWJhciBhcyBpdCBpcyB1c2VkIGluIEphdmE6CiAgICA8cHJlPi8qKiBUZXh0CiAgKiAuLi4KICAqLzwvcHJlPiB3aWxsIG5vdCB3b3JrLgogICAgPC9saT4KICAgIDxsaT48c3Ryb25nPkF0dGVudGlvbjo8L3N0cm9uZz4gVGhlIGZpcnN0ICIvKioiLWNvbW1lbnQgaW4gZWFjaCBmaWxlIGlzIGlnbm9yZWQuPGJyPgogICAgICAgIFRoYXQgaXMgYmVjYXVzZSBBdXRvZG9jIGlzIHVzdWFsbHkgdXNlZCB0byBwYXJzZSBmaWxlcyB3aXRoCiAgICAgICAgbGljZW5zZS0sIENWUy0gb3Igb3RoZXIgc3BlY2lmaWMgaGVhZGVycyB3aGljaCB1c3VhbGx5IHN0YXJ0IHdpdGggIi8qKiIgYXMgd2VsbC48YnI+CiAgICAgICAgU2hvdWxkIHlvdSBoYXZlIGEgZmlsZSB3aXRob3V0IHN1Y2ggYSBoZWFkZXIsIHlvdSBuZWVkIHRvIGluc2VydCBhCiAgICAgICAgZHVtbXkgY29tbWVudC4KICAgIDwvbGkKPC91bD4KCjxoMz48YSBuYW1lPSJ3aGF0Ij5XaGF0IGNhbiBiZSBEb2N1bWVudGVkPC9hPjwvaDM+Cgo8cD5Eb2N1bWVudGFibGUgY29kZSBlbnRpdGllcyBpbiBDKysgYXJlOiA8L3A+Cgo8dWw+CiAgICA8bGk+Y2xhc3NlcyAoaW5jbHVkaW5nIHN0cnVjdHMgYW5kIHVuaW9ucyk8L2xpPgogICAgPGxpPmVudW1zPC9saT4KICAgIDxsaT5mdW5jdGlvbnMgLyBtZXRob2RzPC9saT4KICAgIDxsaT52YXJpYWJsZXMgKGluY2x1ZGluZyBjb25zdGFudHMpPC9saT4KICAgIDxsaT5lbnVtIHZhbHVlcyA8L2xpPgogICAgPGxpPiNkZWZpbmUtcyA8L2xpPgogICAgPGxpPiNkZWZpbmUtZCBtYWNyb3MuIDwvbGk+CjwvdWw+Cgo8cD4KICAgIEFsbCBkb2N1bWVudGF0aW9uIGJlbG9uZ3MgdG8gdGhlIG5leHQgZm9sbG93aW5nIGRvY3VtZW50YWJsZSBjb2RlCiAgICBlbnRpdHkuIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGRvY3VtZW50YXRpb24gcGFyYWdyYXBoIGZvbGxvd2luZwogICAgZWFjaCBvdGhlciwgdGhlIGxhc3Qgb25lIHdpbnMuPGJyPgogICAgQWxzbyBiZSBhd2FyZSwgdGhhdCB0aGUgZmlyc3QgIi8qKiItY29tbWVudCBpbiBlYWNoIGZpbGUgaXMgaW50ZXJwcmV0ZWQKICAgIGFzIHNwZWNpYWwgZmlsZSBoZWFkZXIgYW5kIG5vdCByZWNvZ25pemVkIGJ5IEF1dG9kb2MuCjwvcD4KCjxoMz48YSBuYW1lPSJsYXlvdXQiPkxheW91dDwvYT48L2gzPgoKPHA+SWYgdGhlcmUgaXMgbm8gQC10YWcgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGRvY3VtZW50YXRpb24gcGFyYWdyYXBoLCB0aGUgZmlyc3QgcGFydAogICAgICAgICAgICAgb2YgaXQgaXMgaW50ZXJwcmV0ZWQgbGlrZSA8YSBocmVmPSIjYXRfc2hvcnQiPkBzaG9ydDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaWYgaXQgaXMgbm90IG1vcmUgdGhhbiB0d28gbGluZXMgYW5kIGZvbGxvd2VkCiBieSAgYW4gIGVtcHR5ICAgIGxpbmUuPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhhdCBlbXB0eSBsaW5lLCBvciBpZiBpdCBpcyBtb3JlIHRoYW4KdHdvICAgbGluZXMsICAgIHRleHQgICB3aXRob3V0ICAgICBhbiAgQC10YWcgaXQgaXMgaW50ZXJwcmV0ZWQgbGlrZSA8YSBocmVmPSIjYXRfZGVzY3IiPgogICAgICAgICBAZGVzY3I8L2E+CiAgICAgICAgICAgICAgICAgIC48L3A+Cgo8cD5UaGUgZm9sbG93aW5nIGxheW91dCBpcyByZXF1aXJlZDo8L3A+Cgo8dWw+CiAgICAgICAgICAgPGxpPkxlYWRpbmcgJyoncyBvciAnIydzIGluIGVhY2ggZG9jdW1lbnRhdGlvbiAgICAgICAgbGluZSBtdXN0Cm5vdCBiZSB1c2VkISAgIDwvbGk+CiAgICAgICAgICAgPGxpPiAgICAgICAgICAgICAgIEFsbCBALXRhZ3MgaGF2ZSB0byBiZSB0aGUgZmlyc3Qgbm9uIHdoaXRlc3BhY2UKaW4gdGhlaXIgICAgICAgbGluZSwgIGV4Y2VwdCBvZiB0aGUgIDx0dD4vKiogc3RhcnQgPC90dD5vZiBhIGRvY3VtZW50YXRpb24gcGFyYWdyYXBoLjwvbGk+Cgo8L3VsPgoKPHA+VGhlIGZvbGxvd2luZyBsYXlvdXQgaXMgcmVjb21tZW5kZWQ6PC9wPgoKPHVsPgogICAgICAgICAgIDxsaT5Vc2UgbXVsdGkgbGluZSBkb2N1bWVudGF0aW9uICgvKiouLi4qLykuPC9saT4KICAgICAgICAgICA8bGk+ICAgICAgICAgICAgICAgU3RhcnQgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIHNhbWUgbGluZSBhcwp0aGUgPHR0PiAgICAgICAgICAgICAvKio8L3R0PiAgLjwvbGk+CiAgICAgICAgICAgPGxpPiAgICAgICAgICAgICAgIFRoZSBiZWdpbiBhbmQgZW5kIHNpZ24gKCA8dHQ+LyoqPC90dD4gYW5kIDx0dD4KKi88L3R0PiAgICAgICAgICAgICAgKSBvZiBhICBtdWx0aSBsaW5lIGRvY3VtZW50YXRpb24gc3RhcnQgaW4gdGhlICAgc2FtZQogIGNvbHVtbiAgIGFzICB0aGUgICBkb2N1bWVudGVkICBjb2RlIGVudGl0eS48L2xpPgogICAgICAgICAgIDxsaT4gICAgICAgICAgICAgICBFYWNoIGxpbmUgYW5kIGVhY2ggdGFnIHN0YXJ0IDQgY29sdW1ucyB0byB0aGUKcmlnaHQgb2YgICAgICAgdGhlIGJlZ2luICAgIGFuZCAgIGVuZCAgIHNpZ24gKCYjODIyMDsvKiogYW5kICovJiM4MjIxOykuIDwvbGk+Cgo8L3VsPgoKPHA+SFRNTCB0YWdzIGNhbiBiZSB1c2VkIG9yIG5vdC48YnI+CiAgICAgICAgICAgICBEZWZhdWx0IGlzIG5vIEhUTUwuICggQmVjYXVzZSB0aGlzIG1ha2VzIHdyaXRpbmcgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICAgZWFzaWVyIGFuZCBmYXN0ZXIuICBJZiBkb2N1bWVudGF0aW9uIGlzIGVhc2llciBpdHMgcHJvYmFiaWxpdHkgdG8gZXhpc3QgaW5jcmVhc2VzLgogICkgIEluICAgIHRoaXMgICAgIGNhc2UsIGFsbCBsaW5lIGJyZWFrcyBhbmQgYWxsIGluZGVudGF0aW9ucyB3aWxsIGJlIHByZXNlcnZlZAogICAgaW4gICB0aGUgZ2VuZXJhdGVkICAgICBkb2N1bWVudGF0aW9uLiBBbGwgb3RoZXIgdGhpbmdzIGxpa2UgJiM4MjIwOyZsdDtCUiZndDsmIzgyMjE7CiB3aWxsICAgYXBwZWFyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBzdGlsbCAgICAgaW4gdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLjxicj4KICAgICAgICAgICAgIElmIEhUTUwgc2hhbGwgYmUgdXNlZCAoZm9yIHB1YmxpY2x5IHVzZWQgbGlicmFyaWVzIGEgbW9yZSBzb3BoaXN0aWNhdGVkCiAgICAgICAgICAgICBsYXlvdXQgbWF5IGJlIGRlc2lyZWQpLCB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSB0YWdzIDxhIGhyZWY9IiNhdF9odG1sIj4KICAgICAgICAgICAgIEBIVE1MPC9hPgogICAgICAgICAgICAgIGFuZCA8YSBocmVmPSIjYXRfbm9odG1sIj5ATk9IVE1MPC9hPgogICAgICAgICAgICAgLiAgICAgIFRoZXkgIHN3aXRjaCB0aGUgcmVjb2duaXNpbmcgb2YgSFRNTCBvbiBvciBvZmYgZm9yIHRoZQogcmVzdCAgIG9mICB0aGUgIGZpbGUsICAgICBvciB1bnRpbCAgdGhlIG5leHQgc3VjaCB0YWcuCiAgIDxicj4KICAgPC9wPgoKPGgzPjxhIG5hbWU9InRhZ3MiPlRhZ3M8L2E+PC9oMz4KPGg1PkxlZ2VuZDwvaDU+Cgo8YmxvY2txdW90ZT4KPGRsPgo8ZHQ+QSAnfCcgd2l0aGluIGEgdGFnIDwvZHQ+CiAgICA8ZGQ+bWVhbnMgdGhhdCB0aGUgdGFnIGNhbiBiZSBhYmJyZXZpYXRlZCBhdCB0aGlzICBwb3NpdGlvbgogICAgPC9kZD4KPGR0PldvcmRzIGluIHRoZSBzYW1lIGxpbmUgYXMgdGhlIEAtdGFnPC9kdD4KICAgIDxkZD4gYXJlIHBhcmFtZXRlcnMgdG8gaXQuPC9kZD4KPGR0PiAgICZsdDtBQkMmZ3Q7PC9kdD4KICAgIDxkZD5hIHBhcmFtZXRlcjwvZGQ+CjxkdD4gICJieSIgPC9kdD48ZGQ+VGV4dCB3aXRoaW4gIiIgaXMgdG8gYmUgdXNlZCBsaXRlcmFsbHkuIDwvZGQ+PGR0PlsuLi5dIDwvZHQ+PGRkPlBhcmFtZXRlcnMgd2l0aGluIFtdIGlzIG9wdGlvbmFsLjwvZGQ+PGR0Pk5PVEVYVDwvZHQ+PGRkPlRoZXJlIGNhbid0IGJlIGFueSBhZGRpdGlvbmFsIHRleHQgdG8gdGhpcwogICB0YWcuIDwvZGQ+PC9kbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ibG9ja3F1b3RlPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiAgICAgICAgICBBbGwgdGFncyB3aXRoIHBhcmFtZXRlcnMgIGNhbid0CiAgIGhhdmUgYW55IG1vcmUgdGV4dCBpbiB0aGUgc2FtZSBsaW5lIGFmdGVyIHRoZSBwYXJhbWV0ZXJzLiBQYXJhbWV0ZXJzCm5vdCBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgW10gYXJlIHJlcXVpcmVkIGFuZCBtdXN0IGJlIHNwZWNpZmllZC4KPHByZT4KdGFnICByZXF1aXJlZC1wYXJhbWV0ZXIgW29wdGlvbmFsLXBhcmFtZXRlcl0KPC9wcmU+CjwvcD4KCjxoNT48YSBuYW1lPSJ0X2NvbW1vbiI+Q29tbW9uIFRhZ3M8L2E+PC9oNT4KPGRsPjxkdD5AQVRUfEVOVElPTjwvZHQ+PGRkPklzIHRvIGJlIHVzZWQsIGlmIGludHVpdGl2ZSB1c2Ugb2YgYQpmdW5jdGlvbiAgICAgICBtYXkgYmUgd3JvbmcuICAgT3IgICAgaWYgaXQgaXMgdG8gYmUgdXNlZCBvbmx5IGluIHZlcnkgc3BlY2lmaWMKY2lyY3Vtc3RhbmNlcy48L2RkPjxkdD5AYXV0aG9yICZsdDtBLk5hbWUmZ3Q7PC9kdD48ZGQ+Q3JlYXRvciBvZiB0aGUgY29kZS4gVGhpcyBpcyB0byBiZQogICBjaGFuZ2VkICAgICAgIHRvIHRoZSAobGFzdCkgICBwZXJzb24sIHdobyBkaWQgY2hhbmdlcyBhbmQgdGhlcmVmb3JlIGlzCnJlc3BvbnNpYmxlICAgZm9yICAgIHRoZSAgIHByZXNlbnQgICBjb2RlLiBJZiB0aGUgcGVyc29uLCB3aG8gZGlkIHRoZSBsYXN0CmNoYW5nZSwgaXMgbm90ICByZXNwb25zaWJsZSAgICAgIGZvciAgIHRoZSBjb2RlIChtYXkgYmUsIGJlY2F1c2UgdGhlIGF1dGhvcgp3YXMgb24gdmFjYXRpb24pLCAgIHRoZSBAY2hhbmdlICAgdGFnICAgIGlzIHRvIGJlIHVzZWQuIFRoaXMgdGFnIGNhbiBiZSB1c2VkCmhpZXJhcmNoaWNhbGx5OiAgSWYgdGhlcmUgaXMgYW4gYXV0aG9yIHRhZyBpbiB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbiwgbm90IGV2ZXJ5IG1lbWJlcgpuZWVkcyBhbiBvd24gIG9uZSAgSWYgdGhlcmUgaXMgYW4gYXV0aG9yIHRhZyBpbiBhIG1lbWJlciB0b28sIGl0IGJlbG9uZ3MKdG8gdGhhdCBtZW1iZXIgIG9ubHkuIFRoZSBzYW1lIGZvciBlbnVtcyBhbmQgdGhlaXIgdmFsdWVzLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEVYVC48L2RkPjxkdD5AY2hhbmdlICZsdDtkZC5tbS55eXl5Jmd0OyAiYnkiCiAgICZsdDtXaG9EaWRUaGVDaGFuZ2UmZ3Q7PC9kdD48ZGQ+VGhlcmUgaGFzIHRvIGJlIGEgbmV3IEBjaGFuZ2UKICAgICAgIHRhZyBmb3IgZWFjaCBjaGFuZ2UsIG5ld2VzdCBhdCB0b3AuPC9kZD48ZHQ+QGRlcHJlY2F0ZWQ8L2R0PjxkZD5NYXJrcyBhbiBjb2RlIGVudGl0eSBhcyBleGlzdGluZwogICBvbmx5IGZvciAgICAgIGJhY2t3YXJkcyAgICAgY29tcGF0aWJpbGl0eS48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFWFQ8L2RkPjxkdD48YSBuYW1lPSJhdF9kZXNjciI+PC9hPgogICAgICAgICAgQGRlc2NyPC9kdD48ZGQ+VGhlIG1haW4gdGV4dCBkZXNjcmliaW5nCiAgIHRoZSBkb2N1bWVudGVkIGVudGl0eS48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFnIGNhbiBiZSBvbWl0dGVkIGJlZm9yZSB0aGlzIHRleHQgKHNlZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0eXBpYyI+CiAgICAgICAgICAgQSBUeXBpY2FsIERvY3VtZW50YXRpb248L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLjwvZGQ+PGR0PkBkb2NkYXRlICZsdDtkZC5tbS55eXl5Jmd0OzwvZHQ+PGRkPkRhdGUgb2YgZG9jdW1lbnRhdGlvbi4KICAgVGhlIGxhc3QgZGF0ZSwgd2hlbiB0aGlzIGRvY3VtZW50YXRpb24gd2FzIGNoYW5nZWQuPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URVhULjwvZGQ+CgkJCQkJCQk8ZHQ+QGVtcHR5PC9kdD48ZGQ+U3BlY2lhbCB0YWcgZm9yCiAgIHRlc3RlZCBkb2N1bWVudGF0aW9uLiAgSXQgICAgICAgbWVhbnMsIGhlcmUsIG5vIGRvY3VtZW50YXRpb24gaXMgaW50ZW5kZWQuPGJyPgogICAgICBOT1RFWFQuPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD48ZHQ+QGludGVybmFsPC9kdD48ZGQ+VHlwaWNhbCBmb3IKICAgbm90IGV4cG9ydGVkIG9yIG90aGVyd2lzZSBoaWRkZW4gZnVuY3Rpb25zLiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgIHRoaXMgIGNvZGUKICAgIGVudGl0eSBjYW4gYmUgZmlsdGVyZWQgb3V0IG9mIHRoZSBjcmVhdGVkIGRvY3VtZW50YXRpb24uPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URVhULjwvZGQ+PGR0PkBrZXkgJmx0O0tleVdvcmQmZ3Q7PC9kdD48ZGQ+VGhpcwp0YWcgcHJvdmlkZXMgdGhlIHBvc3NpYmlsaXR5ICAgdG8gICAgc2VhcmNoICAgICAgIGluIHRoZSBjcmVhdGVkIGRvY3VtZW50YXRpb24KICAgb3IgdG8gZmlsdGVyIGl0LCBieSB0aGUgZ2l2ZW4gICBrZXkuPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgT25lIHRhZyBmb3IgZWFjaCBrZXkuIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB3aXRoIGNhcmUuIFRvbyBtYW55IGtleXMgZG9uJ3Qgc3VwcG9ydCBjbGFyaXR5LgogICBNYXliZSwgcG9zc2libGUgICAga2V5d29yZHMgICAgIGluICBhICBwcm9qZWN0ICBzaG91bGQgYmUgZGVmaW5lZCBieSB0aGUKICB0ZWFtLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEVYVC48L2RkPjxkdD5Ac2VlfGFsc28KICAgICZndDsmZ3Q7V2hhdFRvU2VlJmx0OyZsdDs8L2R0PjxkZD5UaGlzCiAgIHBvaW50cyB0byBhIHJlbGF0ZWQgZG9jdW1lbnRlZCAgICAgY29kZSAgICAgICBlbnRpdHkuIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEVYVC48L2RkPjxkdD48YSBuYW1lPSJhdF9zaG9ydCI+PC9hPgogICAgICAgICAgQHNob3J0PC9kdD48ZGQ+CiAgICAgIEEgc2hvcnQgdGV4dCAodHlwaWNhbCAganVzdCAgb25lIGxpbmUpIGRlc2NyaWJpbmcgICAgICAgdGhlIGRvY3VtZW50ZWQKICBlbnRpdHkuICBGb3IgaW5zdGFuY2UsIHRoaXMgIHRleHQgIG1heSBiZSB1c2VkIGluIGluZGljZXMgICBhcyAgIGEgc2hvcnQKIGRlc2NyaXB0aW9uLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YWcgY2FuIGJlIG9taXR0ZWQgYmVmb3JlIHRoaXMgdGV4dCAoc2VlCjxhIGhyZWY9IiN0eXBpYyI+CiAgICAgICAgICAgICAgICAgQSBUeXBpY2FsIERvY3VtZW50YXRpb248L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLjwvZGQ+PGR0PgogICAgICBAdG9kbzwvZHQ+PGRkPgogICAgICBUYXNrcyB3aGljaCBhcmUgc3RpbGwgICBvcGVuICAgd2l0aCBhIGNvZGUgZW50aXR5LjwvZGQ+PC9kbD4KCjxoNT48YSBuYW1lPSJ0X2NsYXNzIj5UYWdzIGZvciBDbGFzc2VzPC9hPjwvaDU+CjxkbD4KICAgIDxkdD4KICAgICAgQGJhc2UgJmd0OyZndDtCYXNlQ2xhc3MmbHQ7Jmx0OzwvZHQ+PGRkPgogICAgICAgIENvbW1lbnQgdG8gYSBiYXNlICAgY2xhc3MuIDxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIG9ubHksIGlmIHRoZXJlIGFyZSBjb21tZW50cy4gU2ltcGxlCmxpc3RpbmcgICAgIG9mICBiYXNlICAgY2xhc3NlcyAgICAgaXMgIGRvbmUgIGF1dG9tYXRpY2x5LjwvZGQ+PGR0PgogICAgICBAY29sbGFifG9yYXRvciAgJmd0OyZndDtUaGVDb2xsYWJvcmF0b3ImbHQ7Jmx0OzwvZHQ+PGRkPgogICAgICAmZ3Q7VGhpcyBpcyAgdG8gIGJlICB1c2VkIGluIHRoZSBzZW5zZSBvZiA8YSBocmVmPSJodHRwOi8vYzIuY29tL2NnaS93aWtpP0NyY0NhcmRzIj4KICAgICAgICAgICAgICAgICAgICAgQ1JDIENhcmRzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSB0YWcgZm9yIGVhY2ggY29sbGFib3JhdG9yLjwvZGQ+PGR0PgogICAgICBAZGVyaXZlPC9kdD48ZGQ+CiAgICAgICAgSWYgdGhlIGNsYXNzICBpcyBkZXNpZ25lZCBmb3IgZGVyaXZhdGlvbiwgICAgICAgaGVyZSBjYW4gYmUgZGVzY3JpYmVkLAogICBob3cgIHRvIGRvIHRoaXM6IFdoaWNoIG1ldGhvZHMgc2hvdWxkIGJlIHJld3JpdHRlbiwgICAgICAgd2hpY2ggc2hvdWxkIG5vdCBldGMuPC9kZD48ZHQ+CiAgICAgIEBpbnN0YW5jZSAgICAmbHQ7T2JqZWN0TmFtZSZndDs8L2R0PjxkZD4KICAgICAgICBEZXNjcmliZXMgICBhIChvciB0aGUgb25lKSBzcGVjaWZpYyBpbnN0YW5jZSAgICAgICBvZiB0aGlzIGNsYXNzLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSB0YWcgZm9yIGVhY2ggaW5zdGFuY2UuPC9kZD48ZHQ+CiAgICAgICAgQGludGVyZmFjZTwvZHQ+PGRkPgogICAgICAgICAgVGhpcyAgdGFnIHNheXMsIHRoaXMgY2xhc3MgaXMgdG8gYmUgdXNlZCBvbmx5IGFzIGFuIGludGVyZmFjZSBhbmQKIGltcGxlbWVudGF0aW9uICAgICAgIGlzIGluIGRlcml2ZWQgY2xhc3Nlcy48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFWFQuPC9kZD48ZHQ+CiAgICAgICAgICBAaW52YXJpYW50PC9kdD48ZGQ+CiAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIGZvciBmb3JtYWwgaW52YXJpYW50cyBvZiB0aGlzICAgICAgIGNsYXNzLiBSZWNvbW1lbmRlZAogICAgZm9yICAgcHVibGljbHkgIHVzZWQgbGlicmFyeSBjbGFzc2VzL2ludGVyZmFjZXMuPC9kZD48ZHQ+CiAgICAgICAgICAgICBAcmVzcHxvbnNpYmlsaXR5ICA8L2R0PjxkZD4KICAgICAgICAgICAgICAgVGhpcyBpcyB0byBiZSB1c2VkIGluIHRoZSBzZW5zZSBvZiA8YSBocmVmPSJodHRwOi8vYzIuY29tL2NnaS93aWtpP0NyY0NhcmRzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQyBDYXJkczwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgdGFnIGZvciBlYWNoIHJlc3BvbnNpYmlsaXR5LjwvZGQ+PGR0PgogICAgICAgICAgICAgQHRwbHxwYXJhbSAmbHQ7VHBsUGFyYW1OYW1lJmd0OzwvZHQ+PGRkPgogICAgICAgICAgICAgICBPbmx5IGZvciB0ZW1wbGF0ZXMuIERlc2NyaWJlcyBhIHRlbXBsYXRlICAgICAgIHBhcmFtZXRlcjoKbWVhbmluZywgICByZXF1aXJlbWVudHMsIHJlc3RyaWN0aW9ucy48YnI+CiAgICAgIE9uZSB0YWcgZm9yIGVhY2ggdGVtcGxhdGUgcGFyYW1ldGVyLjxicj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPjwvZGw+Cgo8aDU+PGEgbmFtZT0idF9mdW5jdCI+VGFncyBmb3IgRnVuY3Rpb25zPC9hPjwvaDU+CjxkbD4KPGR0PkBleGNlcHRpb24gICZndDsmZ3Q7RXhjZXB0aW9uVHlwZSZsdDsmbHQ7PC9kdD48ZGQ+CiAgICAgICAgICAgICAgIERlc2NyaWJlcyBvbmUgZXhjZXB0aW9uLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSB0YWcgZm9yIGVhY2ggZXhjZXB0aW9uLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIG9ubHksIGlmIHRoZXJlIGFyZSBjb21tZW50cy4gU2ltcGxlCmxpc3RpbmcgICAgIG9mICBleGNlcHRpb25zICAgICAgaXMgIGRvbmUgIGF1dG9tYXRpY2x5LjwvZGQ+PGR0PgogICAgICAgICAgICAgQGludmFyaWFudDwvZHQ+PGRkPgogICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBmb3IgZm9ybWFsIGludmFyaWFudHMgb2YgdGhpcyAgICAgICBmdW5jdGlvbi6gPC9kZD48ZHQ+CiAgICAgICAgICAgICBAb25lcnJvcjwvZHQ+PGRkPgogICAgICAgICAgICAgICBIYW5kbGluZyBvZiBlcnJvciBjb25kaXRpb25zLiBDYW4gYmUgdXNlZCwgICAgICAgaWYgdGhlcmUKaXMgIG5vICBleGNlcHRpb24gICAgIHNwZWNpZmljYXRpb24uPC9kZD48ZHQ+CiAgICAgICAgICAgICBAcGFyYW0gJmx0O1BhcmFtZXRlck5hbWUmZ3Q7ICBbICJbIiZsdDtWYWxpZFJhbmdlJmd0OyAiXSIgXTwvZHQ+PGRkPgogICAgICAgICAgICAgICBEZXNjcmliZXMgb25lIGZ1bmN0aW9uIHBhcmFtZXRlci4gPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJhbmdlIGlzIG9wdGlvbmFsLCBidXQgdGhlICdbJyBhbmQgJ10nIG11c3QKIGJlICBsaXRlcmFsbHkgICAgICB0aGVyZSwgICAgaWYgIGEgcmFuZ2UgaXMgZ2l2ZW4uIChUaGV5IGFyZSBub3QgbWVhbnQgYXMKYW4gIm9wdGlvbmFsIHBhcmFtZXRlciIgc2lnbiBoZXJlKS48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgdGFnIGZvciBlYWNoIHBhcmFtZXRlci48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBvbmx5LCBpZiB0aGVyZSBhcmUgY29tbWVudHMuIFNpbXBsZQpsaXN0aW5nICAgICBvZiAgcGFyYW1ldGVycyAgICAgIGlzICBkb25lICBhdXRvbWF0aWNseS48L2RkPjxkdD4KICAgICAgICAgICAgIEBwb3N0Y29uZDwvZHQ+PGRkPgogICAgICAgICAgICAgICBDYW4gYmUgdXNlZCBmb3IgZm9ybWFsIHBvc3Rjb25kaXRpb25zIG9mICAgICAgdGhpcyBmdW5jdGlvbi4KIFJlY29tbWVuZGVkICAgICAgIGZvciBwdWJsaWNseSB1c2VkIGxpYnJhcnkgZnVuY3Rpb25zLjwvZGQ+PGR0PgogICAgICAgICAgICAgQHByZWNvbmQ8L2R0PjxkZD4KICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgZm9yIGZvcm1hbCBwcmVjb25kaXRpb25zIG9mIHRoaXMgZnVuY3Rpb24uIFJlY29tbWVuZGVkCiAgICBmb3IgICBwdWJsaWNseSAgdXNlZCBsaWJyYXJ5IGZ1bmN0aW9ucy48L2RkPjxkdD4KICAgICAgICAgICAgIEByZXR1cm48L2R0PjxkZD4KICAgICAgICAgICAgICAgRGVzY3JpYmVzIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBmdW5jdGlvbi4gICAgICAgIDwvZGQ+PGR0PgogICAgICAgICAgICAgQHRwbHxwYXJhbSAmbHQ7VHBsUGFyYW1ldGVyTmFtZSZndDs8L2R0PjxkZD4KICAgICAgICAgICAgICAgT25seSBmb3IgdGVtcGxhdGVzLiBEZXNjcmliZXMgYSB0ZW1wbGF0ZSAgICAgICBwYXJhbWV0ZXI6Cm1lYW5pbmcsICAgIHJlcXVpcmVtZW50cywgcmVzdHJpY3Rpb25zLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZSB0YWcgZm9yIGVhY2ggdGVtcGxhdGUgcGFyYW1ldGVyLjwvZGQ+PC9kbD4KCjxoNT48YSBuYW1lPSJ0X3ZhciI+VGFncyBmb3IgVmFyaWFibGVzPC9hPjwvaDU+CjxkbD4KPGR0PgogICAgICBAZHluPC9kdD48ZGQ+CiAgICAgIFRoaXMgbWFya3MgYSBwb2ludGVyIHZhcmlhYmxlIGFzIG93bmVyIG9mIGEgaGVhcCBvYmplY3QuIElmICB1c2VkIGNvbnNlcXVlbnRseSwKICAgdGhpcyBpcyBhbHdheXMgbWFrZXMgY2xlYXIsIGlmIGEgcG9pbnRlciAgc2hvdWxkIGJlIGRlbGV0ZWQgb3IgaXMgb25seQpyZWZlcmVuY2luZy4gICBUaGlzIHRhZyBtdXN0IG5vdCBiZSB1c2VkIGZvciByZWZjb3VudGVkIG9iamVjdHMuIElmIGl0IGV4aXN0cywKaXQgYWx3YXlzICAgbWVhbnM6IFVzZSBkZWxldGUgb24gdGhpcyB2YXJpYWJsZSwgb3IgcGFzcyBpdCBvbiB0byBzb21lYm9keSwKd2hvIGRlbGV0ZXMgICBpdCByZWxpYWJseS48YnI+CiAgIDwvZGQ+PGR0PgogICAgICAgICAgICAgQGxpZmV8Y3ljbGU8L2R0PjxkZD4KICAgICAgICAgICAgICAgRGVzY3JpYmVzLCB3aGVuIGEgdmFyaWFibGUgaXMgY3JlYXRlZCBhbmQgZGVzdHJveWVkLjwvZGQ+PGR0PgogICAgICAgICAgICAgQG11bHRpfHBsaWNpdHkgJmx0O1JhbmdlJmd0OzwvZHQ+PGRkPgogICAgICAgICAgICAgICBSYW5nZSBjYW4gYmUgc29tZXRoaW5nIGxpa2UgJiM4MjIwOzErJiM4MjIxOywgJiM4MjIwOzArJiM4MjIxOywgJiM4MjIwOzIuLjUmIzgyMjE7LCAmIzgyMjA7U3RyaW5ncyB1cAogdG8gIDI1NSBjaGFyYWN0ZXJzJiM4MjIxOy48L2RkPgo8L2RsPgoKCjxoNT48YSBuYW1lPSJ0X2dsb2JhbCI+R2xvYmFsIFRhZ3M8L2E+PC9oNT4KPGRsPgo8ZHQ+PGEgbmFtZT0iYXRfaHRtbCI+PC9hPkBIVE1MPC9kdD4KICAgIDxkZD5Gb3IgdGhlIHJlc3Qgb2YgdGhlIHNvdXJjZSBjb2RlIGZpbGUgKG9yIHRpbGwgdGhlIG5leHQKICAgICAgICA8YSBocmVmPSIjYXRfbm9odG1sIj5ATk9IVE1MPC9hPgogICAgICAgICksIEhUTUwtdGFncyAgaW4gZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHJlY29nbmlzZWQgICBhcyAgIHN1Y2guCiAgICA8L2RkPgo8ZHQ+PGEgbmFtZT0iYXRfbm9odG1sIj48L2E+QE5PSFRNTDwvZHQ+CiAgICA8ZGQ+Rm9yIHRoZSByZXN0IG9mIHRoZSBzb3VyY2UgY29kZSBmaWxlIChvciAgICAgICB0aWxsIHRoZSBuZXh0CiAgICAgICAgPGEgaHJlZj0iI2F0X2h0bWwiPiAgICAgICAgICAgQEhUTUw8L2E+CiAgICAgICAgKSwgSFRNTC10YWdzIGluIGRvY3VtZW50YXRpb24gd2lsbCBiZSBpZ25vcmVkIGFuZCAgaGFuZGxlZAogICAgICAgIGxpa2Ugbm9ybWFsIHRleHQsIGllLiBub3QgdHJhbnNsYXRlZC4KICAgIDwvZGQ+CjwvZGw+CgoKPGgzPjxhIG5hbWU9InR5cGljIj48L2E+QSBUeXBpY2FsIERvY3VtZW50YXRpb248L2gzPgoKPHByZT4vKiogU2hvcnQgY29tbWVudDogVGhpcyBpcyBmb3IgLi4uLiAuCgogICAgQWZ0ZXIgYW4gZW1wdHkgbGluZSwgaGVyZSBjb21lcyB0aGUgbWFpbiBkZXNjcmlwdGlvbiBvZiB0aGUgY29kZQogICAgZW50aXR5LiBIZXJlIGNhbiBiZSBhIGxvbmdlciB0ZXh0LCBleGFtcGxlcywKICAgIHBoaWxvc29waGljYWwgY29uc2lkZXJhdGlvbnMgYW5kIHNwZWNpYWwgc29sdXRpb24gZGVzY3JpcHRpb25zLgogICAgQWZ0ZXIgdGhpcyB0ZXh0LCBvbmx5IEAtdGFncyBhcmUgYWxsb3dlZC4gRWFjaCBmb2xsb3dpbmcgdGV4dCBiZWxvbmdzCiAgICB0byBpdHMgcHJlZmFjaW5nIEAtdGFnLgoKICAgIEBwYXJhbSBpbnRlZ2VyMSBbMCAuLiAyNTVdCiAgICBEZXNjcmliZSBwYXJhbWV0ZXIgaW50ZWdlcjEuCgogICAgQHBhcmFtIHN0cjIKICAgIERlc2NyaWJlIHRoZSBwYXJhbWV0ZXIgc3RyMi4KCiAgICBAcmV0dXJuIHRydWUsIGlmIGV2ZXJ5dGhpbmcgaXMgb2suIEVsc2UgZmFsc2UuCiovCmJvb2wgICBmdW5jdF8wMCggaW50IGludGVnZXIxLCBjb25zdCBjaGFyICogc3RyMiApOwo8L3ByZT4KCjwvYm9keT4KPC9odG1sPgo=