PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KPGh0bWw+CjxoZWFkPgogICAgPHRpdGxlPlRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBTZXJ2aWNlcyAtIERpc2Fzc2VtYmx5PC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgbGFuZz0nRU4tVVMnPgoKPGgxPlRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBTZXJ2aWNlcyAtIERpc2Fzc2VtYmx5PC9oMT4KCjx1bD4KICAgIDxsaT48YSBocmVmPScjVmVyc2lvbkhpc3RvcnknPlZlcnNpb24gSGlzdG9yeTwvYT4KICAgIDxsaT48YSBocmVmPScjT3ZlcnZpZXcnPk92ZXJ2aWV3PC9hPgogICAgPGxpPjxhIGhyZWY9JyNDbWRzJz5Db21tYW5kczwvYT4KICAgIDx1bD4KICAgICAgICA8bGk+PGEgaHJlZj0nI0NtZEdldENhcGFiaWxpdGllcyc+R2V0IENhcGFiaWxpdGllczwvYT4KICAgICAgICA8bGk+PGEgaHJlZj0nI0NtZERpc2Fzc2VtYmxlJz5EaXNhc3NlbWJsZTwvYT4KICAgIDwvdWw+CiAgICA8bGk+PGEgaHJlZj0nI0FQSSc+QVBJPC9hPgo8L3VsPgoKPGgxPkRpc2Fzc2VtYmx5IFNlcnZpY2U8L2gxPgoKPGgyPjxhIG5hbWU9J1ZlcnNpb25IaXN0b3J5Jz5WZXJzaW9uIEhpc3Rvcnk8L2E+PC9oMj4KCjx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz04PgogICAgPHRyPgogICAgICAgIDx0aD5WZXJzaW9uCiAgICAgICAgPHRoPkRhdGUKICAgICAgICA8dGg+Q2hhbmdlCiAgICA8dHI+CiAgICAgICAgPHRkPjAuMQogICAgICAgIDx0ZD4yMDExLTAyLTE4CiAgICAgICAgPHRkPkluaXRpYWwgY29udHJpYnV0aW9uCjwvdGFibGU+Cgo8aDI+PGEgbmFtZT0nT3ZlcnZpZXcnPk92ZXJ2aWV3PC9hPjwvaDI+Cgo8cD5EaXNhc3NlbWJseSBpcyB0aGUgdHJhbnNsYXRpb24gb2YgbWFjaGluZSBsYW5ndWFnZSAob3IgbWVtb3J5IGJ5dGVzKSwgaW50byBodW1hbiByZWFkYWJsZSBhc3NlbWJseSBsYW5ndWFnZS4gIFRoZSByZWFkYWJsZSBhc3NlbWJseSBsYW5ndWFnZSBpcyBwcm9kdWNlZCBmcm9tIGEgc3BlY2lmaWVkIEluc3RydWN0aW9uIFNldCBBcmNoaXRlY3R1cmUgKG9yIElTQSkuPC9wPgoKPHA+V2hpbGUgZGlzYXNzZW1ibHkgaXMgZGVwZW5kZW50IHVwb24gYSBzcGVjaWZpYyBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLCB0aGUgbWVtb3J5IGZyb20gd2hpY2ggaXQgaXMgZGVyaXZlZCBpcyBub3QuICBTbyBmb3IgYSBnaXZlbiBtZW1vcnkgY29udGV4dCwgb3IgYnVmZmVyLCB0aGUgc3BlY2lmaWVkIElTQSB1c2VkIHRvIGRpc2Fzc2VtYmxlIHRoZSBtZW1vcnkgYnl0ZXMgaXMgc3ViamVjdGl2ZSB0byB0aGUgVG9vbCBvciB1c2VyLjwvcD4KCjxwPlRoZSBzZXJ2aWNlIHVzZXMgc3RhbmRhcmQgZm9ybWF0IGZvciBlcnJvciByZXBvcnRzLApzZWUgPGEgaHJlZj0nVENGIFNlcnZpY2VzLmh0bWwjRXJyb3JGb3JtYXQnPkVycm9yIFJlcG9ydCBGb3JtYXQ8L2E+LjwvcD4KCjxoMj48YSBuYW1lPSdDbWRzJz5Db21tYW5kczwvYT48L2gyPgoKPGgzPjxhIG5hbWU9J0NtZERpc2Fzc2VtYmxlJz5EaXNhc3NlbWJsZTwvYT48L2gzPgoKPHByZT48Yj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0yIGNvbG9yPSMzMzMzOTk+CkMgJmJ1bGw7IDxpPiZsdDt0b2tlbiZndDs8L2k+ICZidWxsOyBEaXNhc3NlbWJseSAmYnVsbDsgZGlzYXNzZW1ibGUgJmJ1bGw7IDxpPiZsdDtzdHJpbmc6IGNvbnRleHQtaWQmZ3Q7PC9pPiAmYnVsbDsgPGk+Jmx0O2ludDogc3RhcnQgbG9jYXRpb24mZ3Q7PC9pPiAmYnVsbDsgPGk+Jmx0O2ludDogc2l6ZSZndDs8L2k+ICZidWxsOyA8aT4mbHQ7b2JqZWN0OiBkaXNhc3NlbWJseSBwYXJhbWV0ZXJzJmd0OzwvaT4gJmJ1bGw7PC9mb250PjwvYj48L3ByZT4KCjxwPiBUaGUgY29tbWFuZCBkaXNhc3NlbWJsZXMgaW5zdHJ1Y3Rpb24gY29kZSBmcm9tIGEgc3BlY2lmaWVkIHJhbmdlIG9mIG1lbW9yeSwgaW4gYSBzcGVjaWZpZWQgY29udGV4dC48cD4KCjxwPldoZXJlIGNvbnRleHQtaWQgaXMgdGhlIG1lbW9yeSBjb250ZXh0IGluIHdoaWNoIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQuPC9wPgoKPHA+UHJlZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZTo8L3A+CjxkbD4KPHVsPgogICAgPGxpPjxkdD48Y29kZT48Yj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0yIGNvbG9yPSMzMzMzOTk+PGEgbmFtZT0ncHJvcElTQSc+IklTQSI8L2E+IDogPGk+Jmx0O3N0cmluZyZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICA8ZGQ+VGhlIG5hbWUgb2YgdGhlIGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmUuCiAgICA8L2xpPgoKICAgIDxsaT48ZHQ+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PjxhIG5hbWU9J3Byb3BTaW1wbGlmaWVkJz4iU2ltcGxpZmllZCI8L2E+IDogPGk+Jmx0O2Jvb2xlYW4mZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgPGRkPklmIHRydWUsIHNpbXBsaWZpZWQgbW5lbW9uaWNzIGFyZSBzcGVjaWZpZWQuCiAgICA8L2xpPgoKICAgIDxsaT48ZHQ+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PjxhIG5hbWU9J3Byb3BQc2V1ZG9JbnN0Jz4iUHNldWRvSW5zdHJ1Y3Rpb25zIjwvYT4gOiA8aT4mbHQ7Ym9vbGVhbiZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICA8ZGQ+SWYgdHJ1ZSwgcHNldWRvLWluc3RydWN0aW9ucyBhcmUgcmVxdWVzdGVkLgogICAgPC9saT4KCiAgICA8bGk+PGR0Pjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT48YSBuYW1lPSdwcm9wT3Bjb2RlVmFsdWUnPiJPcGNvZGVWYWx1ZSI8L2E+IDogPGk+Jmx0O2Jvb2xlYW4mZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgPGRkPklmIHRydWUsIHRoZSBpbnN0cnVjdGlvbiBjb2RlIGJ5dGUgdmFsdWVzIGFyZSByZXR1cm5lZC4KICAgIDwvbGk+CjwvdWw+CjwvZGw+Cgo8cD5SZXBseTo8L3A+Cgo8cHJlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4KUiAmYnVsbDsgPGk+Jmx0O3Rva2VuJmd0OzwvaT4gJmJ1bGw7IDxpPiZsdDtlcnJvciByZXBvcnQmZ3Q7PC9pPiAmYnVsbDsgPGk+Jmx0O2FycmF5OiBkaXNhc3NlbWJseSBvdXRwdXQmZ3Q7PC9pPiAmYnVsbDsKCjxpPiZsdDthcnJheTogZGlzYXNzZW1ibHkgb3V0cHV0Jmd0OzwvaT4KICAgICZyQXJyOyA8aT4mbHQ7bnVsbCZndDs8L2k+CiAgICAmckFycjsgWyBdCiAgICAmckFycjsgWyA8aT4mbHQ7ZGlzYXNzZW1ibHkgbGluZSBsaXN0Jmd0OzwvaT4gXQoKPGk+Jmx0O2Rpc2Fzc2VtYmx5IGxpbmUgbGlzdCZndDs8L2k+CiAgICAmckFycjsgPGk+Jmx0O29iamVjdDogZGlzYXNzZW1ibHkgbGluZSZndDs8L2k+CiAgICAmckFycjsgPGk+Jmx0O2Rpc2Fzc2VtYmx5IGxpbmUgbGlzdCZndDs8L2k+LCA8aT4mbHQ7b2JqZWN0OiBkaXNhc3NlbWJseSBsaW5lJmd0OzwvaT4KPC9mb250PjwvYj48L3ByZT4KCjxwcmU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5Pgo8aT4mbHQ7b2JqZWN0OiBkaXNhc3NlbWJseSBsaW5lJmd0OzwvaT4KPC9mb250PjwvYj48L3ByZT4KCjxwPkRpc2Fzc2VtYmx5IGxpbmUgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcy4gUHJlZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZTo8L3A+Cgo8dWw+CiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJJU0EiIDogPGk+Jmx0O3N0cmluZyZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAtIEluc3RydWN0aW9uIFNldCBBcmNoaXRlY3R1cmUgb2YgdGhlIGRpc2Fzc2VtYmx5IGxpbmUKICAgIDxsaT48Y29kZT48Yj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0yIGNvbG9yPSMzMzMzOTk+IkFkZHJlc3MiIDogPGk+Jmx0O2ludCZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbgogICAgPGxpPjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4iU2l6ZSIgOiA8aT4mbHQ7aW50Jmd0OzwvaT48L2ZvbnQ+PC9iPjwvY29kZT4KICAgICAgICAtIFNpemUgb2YgdGhlIGluc3RydWN0aW9uIGluIGJ5dGVzCiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJJbnN0cnVjdGlvbiIgOiA8aT4mbHQ7YXJyYXkmZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgICAgIC0gQXJyYXkgb2YgdGhlIGludHJ1Y3Rpb24gZmllbGRzCiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJPcGNvZGVWYWx1ZSIgOiA8aT4mbHQ7c3RyaW5nJmd0OzwvaT48L2ZvbnQ+PC9iPjwvY29kZT4KICAgICAgICAtIEVuY29kZWQgYnl0ZSBhcnJheSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYmluYXJ5IHJlcHJlc2VudGF0aW9uCjwvdWw+Cgo8cHJlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4KPGk+Jmx0O29iamVjdDogSW5zdHJ1Y3Rpb24gZmllbGQmZ3Q7PC9pPgo8L2ZvbnQ+PC9iPjwvcHJlPgoKPHA+SW5zdHJ1Y3Rpb24gZmllbGQgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcy4gIFByZWRlZmluZWQgcHJvcGVydGllcyBhcmU6PC9wPgoKPHVsPgogICAgPGxpPjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4iVHlwZSIgOiA8aT4mbHQ7c3RyaW5nJmd0OzwvaT48L2ZvbnQ+PC9iPjwvY29kZT4KICAgIC0gVGhlIHByZWRlZmluZWQgdHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gZmllbGQuICBQcmVkZWZpbmVkIHR5cGVzIGFyZToKICAgIDx1bD4KICAgICAgICA8bGk+IlN0cmluZyIKICAgICAgICA8bGk+IlJlZ2lzdGVyIgogICAgICAgIDxsaT4iQWRkcmVzcyIKICAgICAgICA8bGk+IkRpc3BsYWNlbWVudCIKICAgICAgICA8bGk+IkltbWVkaWF0ZSIKICAgIDwvdWw+CiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJUZXh0IiA6IDxpPiZsdDtzdHJpbmcmZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgLSBWYWx1ZSBvZiB0aGUgZmllbGQgZm9yICJTdHJpbmciIGFuZCAiUmVnaXN0ZXIiIHR5cGVzLgogICAgPGxpPjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4iVmFsdWUiIDogPGk+Jmx0O251bWJlciZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAtIFZhbHVlIG9mIHRoZSBmaWVsZCBmb3IgIkFkZHJlc3MsIiAiRGlzcGxhY2VtZW50LCIgb3IgIkltbWVkaWF0ZSIgdHlwZXMuCiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJBZGRyZXNzU3BhY2UiIDogPGk+Jmx0O2NvbnRleHQtaWQmZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgLSBDb250ZXh0LUlEIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHVzZWQgd2l0aCB0aGUgIkFkZHJlc3MiIHR5cGUuCjwvdWw+CgoKPHA+PGI+RXhhbXBsZXM6PC9iPjwvcD4KCjxwPlRoZSBmb2xsb3dpbmcgY29tbWFuZCByZXF1ZXN0cyBkaXNhc3NlbWJseSBhdCBhZGRyZXNzIDxjb2RlPjB4MTAwMDwvY29kZT4sIGZvciA4IGJ5dGVzLCBpbiBtZW1vcnkgY29udGV4dCAibWMxIiwgdXNpbmcgYSBnZW5lcmljIFBvd2VyUEMgSVNBLCBhbmQgcmVxdWVzdGluZyBpbnN0cnVjdGlvbiBjb2RlIGJ5dGVzOjwvcD4KCjxwcmU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PgpDIDxpPiZsdDt0b2tlbiZndDs8L2k+IERpc2Fzc2VtYmx5IDxpPmRpc2Fzc2VtYmxlICJtYzEiIDB4MTAwMCA4IHtJU0E6UFBDLE9wY29kZVZhbHVlOnRydWV9PC9pPgo8L2ZvbnQ+PC9iPjwvcHJlPgoKPGgzPjxhIG5hbWU9J0NtZEdldENhcGFiaWxpdGllcyc+R2V0IENhcGFiaWxpdGllczwvYT48L2gzPgoKPHByZT48Yj48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyIgc2l6ZT0yIGNvbG9yPSMzMzMzOTk+CkMgJmJ1bGw7IDxpPiZsdDt0b2tlbiZndDs8L2k+ICZidWxsOyBEaXNhc3NlbWJseSAmYnVsbDsgZ2V0Q2FwYWJpbGl0aWVzICZidWxsOyA8aT4mbHQ7c3RyaW5nOiBjb250ZXh0IElEJmd0OzwvaT4gJmJ1bGw7CjwvZm9udD48L2I+PC9wcmU+Cgo8cD5UaGUgY29tbWFuZCByZXBvcnRzIGRpc2Fzc2VtYmx5IHNlcnZpY2UgY2FwYWJpbGl0aWVzIHRvIGNsaWVudHMgc28gdGhleQpjYW4gYWRqdXN0IHRvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHNlcnZpY2UuClRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGNvbnRleHQgZGVwZW5kcyBvbiB0aGUgdGFyZ2V0IGFnZW50IGFuZCBwcm92aWRlZCB0b3BvbG9neS48L3A+Cgo8cD5SZXBseTo8L3A+Cgo8cHJlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4KUiAmYnVsbDsgPGk+Jmx0O3Rva2VuJmd0OzwvaT4gJmJ1bGw7IDxpPiZsdDtlcnJvciByZXBvcnQmZ3Q7PC9pPiAmYnVsbDsgPGk+Jmx0O3NlcnZpY2UgY2FwYWJpbGl0aWVzJmd0OzwvaT4gJmJ1bGw7Cgo8aT4mbHQ7c2VydmljZSBjYXBhYmlsaXRpZXMmZ3Q7PC9pPgogICAgJnJBcnI7IDxpPiZsdDtudWxsJmd0OzwvaT4KICAgICZyQXJyOyA8aT4mbHQ7YXJyYXk6IGNhcGFiaWxpdGllcyBsaXN0Jmd0OzwvaT4KPC9mb250PjwvYj48L3ByZT4KCjxwPlNlcnZpY2UgY2FwYWJpbGl0aWVzIGNvbnNpc3Qgb2YgYW4gYXJyYXkgb2YgbGlzdHMgb2YgcHJvcGVydGllcy4gQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLgpUb29scyBhbmQgdGFyZ2V0cyBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgcHJvcGVydGllcy4gUHJlZGVmaW5lZCBwcm9wZXJ0aWVzIGFyZTo8L3A+Cgo8dWw+CiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJJU0EiIDogPGk+Jmx0O3N0cmluZyZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAtIFRoZSBuYW1lIG9mIHRoZSBzdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0IGFyY2hpdGVjdHVyZQogICAgPGxpPjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4iU2ltcGxpZmllZCIgOiA8aT4mbHQ7Ym9vbGVhbiZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAtIElmIHRydWUsIHNpbXBsaWZpZWQgbW5lbW9uaWNzIGFyZSBzdXBwb3J0ZWQuICBUaGVzZSBhcmUgdHlwaWNhbCAxOjEgY29ycmVsYXRpb24gb2YgYXJjaGl0ZWN0dXJlIGluc3RydWN0aW9uIHRvIHNpbXBsaWZpZWQgbW5lbW9uaWMuCiAgICA8bGk+PGNvZGU+PGI+PGZvbnQgZmFjZT0iQ291cmllciBOZXciIHNpemU9MiBjb2xvcj0jMzMzMzk5PiJQc2V1ZG9JbnN0cnVjdGlvbiIgOiA8aT4mbHQ7Ym9vbGVhbiZndDs8L2k+PC9mb250PjwvYj48L2NvZGU+CiAgICAtIElmIHRydWUsIHBzZXVkby1pbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4gIFRoZXNlIGFyZSB0eXBpY2FsbHkgbWFjcm9zLCB3aGljaCBjb3JyZWxhdGUgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlIGluc3RydWN0aW9ucyB0byBvbmUgcHNldWRvLWluc3RydWN0aW9uLgogICAgPGxpPjxjb2RlPjxiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3IiBzaXplPTIgY29sb3I9IzMzMzM5OT4iT3Bjb2RlVmFsdWUiIDogPGk+Jmx0O2Jvb2xlYW4mZ3Q7PC9pPjwvZm9udD48L2I+PC9jb2RlPgogICAgLSBJZiB0cnVlLCB0aGUgZGVjb2RlZCBpbnN0cnVjdGlvbiBjb2RlIGJ5dGVzIGFyZSByZXRyaWV2YWJsZSB3aXRoIHRoZSBPcGNvZGVWYWx1ZSBwYXJhbWV0ZXIuCjwvdWw+Cgo8aDI+PGEgbmFtZT0nQVBJJz5BUEk8L2E+PC9oMj4KCjxwcmU+Cjxmb250IGNvbG9yPSMzRjVGQkY+LyoqCiAqIFRDRiBEaXNhc3NlbWJseSBzZXJ2aWNlIGludGVyZmFjZS4KICovPC9mb250Pgo8Zm9udCBjb2xvcj0jN0YwMDU1PnB1YmxpYyBpbnRlcmZhY2U8L2ZvbnQ+IElEaXNhc3NlbWJseSA8Zm9udCBjb2xvcj0jN0YwMDU1PmV4dGVuZHM8L2ZvbnQ+IElTZXJ2aWNlIHsKCiAgICA8Zm9udCBjb2xvcj0jM0Y1RkJGPi8qKgogICAgICogU2VydmljZSBuYW1lLgogICAgICovPC9mb250PgogICAgPGZvbnQgY29sb3I9IzdGMDA1NT5zdGF0aWMgZmluYWw8L2ZvbnQ+IFN0cmluZyBOQU1FID0gIkRpc2Fzc2VtYmx5IjsKCiAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PnN0YXRpYyBmaW5hbDwvZm9udD4gU3RyaW5nCiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKiogVGhlIG5hbWUgb2YgdGhlIGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmUsIFN0cmluZyAqLzwvZm9udD4KICAgICAgICBDQVBBQklMSVRZX0lTQSA9ICJJU0EiLAoKICAgICAgICA8Zm9udCBjb2xvcj0jM0Y1RkJGPi8qKiBJZiB0cnVlLCBzaW1wbGlmaWVkIG1uZW1vbmljcyBhcmUgc3VwcG9ydGVkIG9yIHJlcXVlc3RlZCwgQm9vbGVhbiAqLzwvZm9udD4KICAgICAgICBDQVBBQklMSVRZX1NJTVBMSUZJRUQgPSAiU2ltcGxpZmllZCIsCgogICAgICAgIDxmb250IGNvbG9yPSMzRjVGQkY+LyoqIElmIHRydWUsIHBzZXVkby1pbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCBvciByZXF1ZXN0ZWQsIEJvb2xlYW4gKi88L2ZvbnQ+CiAgICAgICAgQ0FQQUJJTElUWV9QU0VVRE8gPSAiUHNldWRvIiwKCiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKiogSWYgdHJ1ZSwgaW5zdHJ1Y3Rpb24gY29kZSBieXRlcyBhcmUgc3VwcG9ydGVkIG9yIHJlcXVlc3RlZCwgQm9vbGVhbiAqLzwvZm9udD4KICAgICAgICBDQVBBQklMSVRZX09QQ09ERSA9ICJPcGNvZGVWYWx1ZSI7CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAqIFJldHJpZXZlIGRpc2Fzc2VtYmx5IHNlcnZpY2UgY2FwYWJpbGl0aWVzIGEgZ2l2ZW4gY29udGV4dC1pZC4KICAgICAqIEBwYXJhbSBjb250ZXh0X2lkIC0gYSBjb250ZXh0IElELCB1c3VhbGx5IG9uZSByZXR1cm5lZCBieSBSdW4gQ29udHJvbCBvciBNZW1vcnkgc2VydmljZXMuCiAgICAgKiBAcGFyYW0gZG9uZSAtIGNvbW1hbmQgcmVzdWx0IGNhbGwgYmFjayBvYmplY3QuCiAgICAgKiBAcmV0dXJuIC0gcGVuZGluZyBjb21tYW5kIGhhbmRsZS4KICAgICAqLzwvZm9udD4KICAgIElUb2tlbiBnZXRDYXBhYmlsaXRpZXMoU3RyaW5nIGNvbnRleHRfaWQsIERvbmVHZXRDYXBhYmlsaXRpZXMgZG9uZSk7CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAqIENhbGwgYmFjayBpbnRlcmZhY2UgZm9yICdnZXRDYXBhYmlsaXRpZXMnIGNvbW1hbmQuCiAgICAgKi88L2ZvbnQ+CiAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PkludGVyZmFjZTwvZm9udD4gRG9uZUdldENhcGFiaWxpdGllcyB7CiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAgICAgKiBDYWxsZWQgd2hlbiBjYXBhYmlsaXRpZXMgcmV0cmlldmFsIGlzIGRvbmUuCiAgICAgICAgICogQHBhcmFtIHRva2VuIC0gY29tbWFuZCBoYW5kbGUuCiAgICAgICAgICogQHBhcmFtIGVycm9yIC0gZXJyb3Igb2JqZWN0IG9yIG51bGwuCiAgICAgICAgICogQHBhcmFtIGNhcGFiaWxpdGllcyAtIGFycmF5IG9mIGNhcGFiaWxpdGllcywgc2VlIENBUEFCSUxJVFlfKiBmb3IgY29udGVudHMgb2YgZWFjaCBhcnJheSBlbGVtZW50LgogICAgICAgICAqLzwvZm9udD4KICAgICAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PnZvaWQ8L2ZvbnQ+IGRvbmVHZXRDYXBhYmlsaXRpZXMoSVRva2VuIHRva2VuLCBUaHJvd2FibGUgZXJyb3IsIE1hcDxTdHJpbmcsT2JqZWN0PltdIGNhcGFiaWxpdGllcyk7CiAgICB9CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAqIERpc2Fzc2VtYmxlIGluc3RydWN0aW9uIGNvZGUgZnJvbSBhIHNwZWNpZmllZCByYW5nZSBvZiBtZW1vcnkgYWRkcmVzc2VzLCBpbiBhIHNwZWNpZmllZCBjb250ZXh0LgogICAgICogQHBhcmFtIGNvbnRleHRfaWQgLSBhIGNvbnRleHQgSUQsIHVzdWFsbHkgb25lIHJldHVybmVkIGJ5IFJ1biBDb250cm9sIG9yIE1lbW9yeSBzZXJ2aWNlcy4KICAgICAqIEBwYXJhbSBhZGRyIC0gYWRkcmVzcyBvZiBmaXJzdCBpbnN0cnVjdGlvbiB0byBkaXNhc3NlbWJsZS4KICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBpbiBieXRlcyBvZiB0aGUgYWRkcmVzcyByYW5nZS4KICAgICAqIEBwYXJhbSBwYXJhbXMgLSBwcm9wZXJ0aWVzIHRvIGNvbnRyb2wgdGhlIGRpc2Fzc2VtYmx5IG91dHB1dCwgYW4gZWxlbWVudCBvZiBjYXBhYmlsaXRpZXMgYXJyYXksIHNlZSBnZXRDYXBhYmlsaXRpZXMuCiAgICAgKiBAcGFyYW0gZG9uZSAtIGNvbW1hbmQgcmVzdWx0IGNhbGwgYmFjayBvYmplY3QuCiAgICAgKiBAcmV0dXJuIC0gcGVuZGluZyBjb21tYW5kIGhhbmRsZS4KICAgICAqLzwvZm9udD4KCiAgICBJVG9rZW4gZGlzYXNzZW1ibGUoU3RyaW5nIGNvbnRleHRfaWQsIE51bWJlciBhZGRyLCBpbnQgc2l6ZSwgTWFwPFN0cmluZyxPYmplY3Q+IHBhcmFtcywgRG9uZURpc2Fzc2VtYmxlIGRvbmUpOwoKICAgIDxmb250IGNvbG9yPSMzRjVGQkY+LyoqCiAgICAgKiBDYWxsIGJhY2sgaW50ZXJmYWNlIGZvciAnZGlzYXNzZW1ibGUnIGNvbW1hbmQuCiAgICAgKi88L2ZvbnQ+CiAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PmludGVyZmFjZTwvZm9udD4gRG9uZURpc2Fzc2VtYmxlIHsKICAgICAgICA8Zm9udCBjb2xvcj0jM0Y1RkJGPi8qKgogICAgICAgICAqIENhbGxlZCB3aGVuIGRpc2Fzc2VtYmxpbmcgaXMgZG9uZS4KICAgICAgICAgKiBAcGFyYW0gdG9rZW4gLSBjb21tYW5kIGhhbmRsZS4KICAgICAgICAgKiBAcGFyYW0gZXJyb3IgLSBlcnJvciBvYmplY3Qgb3IgbnVsbC4KICAgICAgICAgKiBAcGFyYW0gZGlzYXNzZW1ibHkgLSBhcnJheSBvZiBkaXNhc3NlbWJseSBsaW5lcy4KICAgICAgICAgKi88L2ZvbnQ+CiAgICAgICAgPGZvbnQgY29sb3I9IzdGMDA1NT52b2lkPC9mb250PiBkb25lRGlzYXNzZW1ibGUoSVRva2VuIHRva2VuLCBUaHJvd2FibGUgZXJyb3IsIElEaXNhc3NlbWJseUxpbmVbXSBkaXNhc3NlbWJseSk7CiAgICB9CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAqIEludGVyZmFjZSB0byByZXByZXNlbnQgYSBzaW5nbGUgZGlzYXNzZW1ibHkgbGluZS4KICAgICAqLzwvZm9udD4KICAgIDxmb250IGNvbG9yPSM3RjAwNTU+aW50ZXJmYWNlPC9mb250PiBJRGlzYXNzZW1ibHlMaW5lIHsKCiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAgICAgKiBAcmV0dXJuIGluc3RydWN0aW9uIGFkZHJlc3MuCiAgICAgICAgICovPC9mb250PgogICAgICAgIE51bWJlciBnZXRBZGRyZXNzKCk7CgogICAgICAgIDxmb250IGNvbG9yPSMzRjVGQkY+LyoqCiAgICAgICAgICogQHJldHVybiBpbnN0cnVjdGlvbiBzaXplIGluIGJ5dGVzLgogICAgICAgICAqLzwvZm9udD4KICAgICAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PmludDwvZm9udD4gZ2V0U2l6ZSgpOwoKICAgICAgICA8Zm9udCBjb2xvcj0jM0Y1RkJGPi8qKgogICAgICAgICAqIEByZXR1cm4gaW5zdHJ1Y3Rpb24gYmluYXJ5IHJlcHJlc2VudGF0aW9uLgogICAgICAgICAqLzwvZm9udD4KICAgICAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PmJ5dGU8L2ZvbnQ+W10gZ2V0T3Bjb2RlVmFsdWUoKTsKCiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKioKICAgICAgICAgKiBAcmV0dXJuIGFycmF5IG9mIGluc3RydWN0aW9uIGZpZWxkcywgZWFjaCBmaWVsZCBpcyBhIGNvbGxlY3Rpb24gb2YgZmllbGQgcHJvcGVydGllcywgc2VlIEZJRUxEXyouCiAgICAgICAgICovPC9mb250PgogICAgICAgIE1hcCZsdDtTdHJpbmcsT2JqZWN0Jmd0O1tdIGdldEluc3RydWN0aW9uKCk7CiAgICB9CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKiogSW5zdHJ1Y3Rpb24gZmllbGQgcHJvcGVydGllcyAqLzwvZm9udD4KICAgIDxmb250IGNvbG9yPSM3RjAwNTU+c3RhdGljIGZpbmFsPC9mb250PiBTdHJpbmcKICAgICAgICA8Zm9udCBjb2xvcj0jM0Y1RkJGPi8qKiBUaGUgdHlwZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gZmllbGQuIFNlZSBGVFlQRV8qLCBTdHJpbmcuICovPC9mb250PgogICAgICAgIEZJRUxEX1RZUEUgPSAiVHlwZSIsCgogICAgICAgIDxmb250IGNvbG9yPSMzRjVGQkY+LyoqIFZhbHVlIG9mIHRoZSBmaWVsZCBmb3Igk1N0cmluZ5QgYW5kIJNSZWdpc3RlcpQgdHlwZXMsIFN0cmluZy4gKi88L2ZvbnQ+CiAgICAgICAgRklFTERfVEVYVCA9ICJUZXh0IiwKCiAgICAgICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKiogVmFsdWUgb2YgdGhlIGZpZWxkIGZvciCTQWRkcmVzcyyUIJNEaXNwbGFjZW1lbnQslCBvciCTSW1tZWRpYXRllCB0eXBlcywgTnVtYmVyLiAqLzwvZm9udD4KICAgICAgICBGSUVMRF9WQUxVRSA9ICJWYWx1ZSIsCgogICAgICAgIDxmb250IGNvbG9yPSMzRjVGQkY+LyoqIENvbnRleHQgSUQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdXNlZCB3aXRoIJNBZGRyZXNzlCB0eXBlcywgU3RyaW5nLiAqLzwvZm9udD4KICAgICAgICBGSUVMRF9BRERSRVNTX1NQQUNFID0gIkFkZHJlc3NTcGFjZSI7CgogICAgPGZvbnQgY29sb3I9IzNGNUZCRj4vKiogSW5zdHJ1Y3Rpb24gZmllbGQgdHlwZXMgKi88L2ZvbnQ+CiAgICA8Zm9udCBjb2xvcj0jN0YwMDU1PnN0YXRpYyBmaW5hbDwvZm9udD4gU3RyaW5nCiAgICAgICAgRlRZUEVfU1RSSU5HID0gIlN0cmluZyIsCiAgICAgICAgRlRZUEVfUkVHSVNURVIgPSAiUmVnaXN0ZXIiLAogICAgICAgIEZUWVBFX0FERFJFU1MgPSAiQWRkcmVzcyIsCiAgICAgICAgRlRZUEVfRElTUExBQ0VNRU5UID0gIkRpc3BsYWNlbWVudCIsCiAgICAgICAgRlRZUEVfSU1NRURJQVRFID0gIkltbWVkaWF0ZSI7Cn0KPC9wcmU+Cgo8L2JvZHk+CjwvaHRtbD4K