QXBhY2hlIENvbW1vbnMgQ29tcHJlc3MgClZlcnNpb24gMS4yNi4wClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTgotLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIENvbXByZXNzIGRlZmluZXMgYW4gQVBJIGZvciB3b3JraW5nIHdpdGggY29tcHJlc3Npb24gYW5kCmFyY2hpdmUgZm9ybWF0cy4gIFRoZXNlIGluY2x1ZGU6IGJ6aXAyLCBnemlwLCBwYWNrMjAwLCBMWk1BLCBYWiwgU25hcHB5LAp0cmFkaXRpb25hbCBVbml4IENvbXByZXNzLCBERUZMQVRFLCBERUZMQVRFNjQsIExaNCwgQnJvdGxpLCBac3RhbmRhcmQgYW5kCmFyLCBjcGlvLCBqYXIsIHRhciwgemlwLCBkdW1wLCA3eiwgYXJqLgoKQXBhY2hlIENvbW1vbnMgQ29tcHJlc3MgZGVmaW5lcyBhbiBBUEkgZm9yIHdvcmtpbmcgd2l0aApjb21wcmVzc2lvbiBhbmQgYXJjaGl2ZSBmb3JtYXRzLiBUaGVzZSBpbmNsdWRlIGJ6aXAyLCBnemlwLCBwYWNrMjAwLApMWk1BLCBYWiwgU25hcHB5LCB0cmFkaXRpb25hbCBVbml4IENvbXByZXNzLCBERUZMQVRFLCBERUZMQVRFNjQsIExaNCwKQnJvdGxpLCBac3RhbmRhcmQgYW5kIGFyLCBjcGlvLCBqYXIsIHRhciwgemlwLCBkdW1wLCA3eiwgYXJqLgoKTWlub3IgZmVhdHVyZSBhbmQgbWFpbnRlbmFuY2UgcmVsZWFzZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgRmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogICAgICAgICAgICBBZGQgYW5kIHVzZSBaaXBGaWxlLmJ1aWxkZXIoKSwgWmlwRmlsZS5CdWlsZGVyLCBhbmQgZGVwcmVjYXRlIGNvbnN0cnVjdG9ycy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBBZGQgYW5kIHVzZSBTZXZlblpGaWxlLmJ1aWxkZXIoKSwgU2V2ZW5aRmlsZS5CdWlsZGVyLCBhbmQgZGVwcmVjYXRlIGNvbnN0cnVjdG9ycy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBBZGQgYW5kIHVzZSBBcmNoaXZlSW5wdXRTdHJlYW0uZ2V0Q2hhcnNldCgpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIEFkZCBhbmQgdXNlIEFyY2hpdmVFbnRyeS5yZXNvbHZlSW4oUGF0aCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgQWRkIE1hdmVuIHByb3BlcnR5IHByb2plY3QuYnVpbGQub3V0cHV0VGltZXN0YW1wIGZvciBidWlsZCByZXByb2R1Y2liaWxpdHkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoKRml4ZWQgQnVncwotLS0tLS0tLS0KCiogIENPTVBSRVNTLTYzMjogIENoZWNrIGZvciBpbnZhbGlkIFBBWCB2YWx1ZXMgaW4gVGFyQXJjaGl2ZUVudHJ5ICM0MzguIFRoYW5rcyB0byBZYWtvdiBTaGFmcmFub3ZpY2gsIEdhcnkgR3JlZ29yeS4gCiogIENPTVBSRVNTLTYzMjogIEZpeCBmb3IgemVybyBzaXplIGhlYWRlcnMgaW4gQXJqSW5wdXRTdHJlYW0gIzQzOS4gVGhhbmtzIHRvIFlha292IFNoYWZyYW5vdmljaCwgR2FyeSBHcmVnb3J5LiAKKiAgQ09NUFJFU1MtNjMyOiAgRml4ZXMgYW5kIHRlc3RzIGZvciBBcklucHV0U3RyZWFtICM0NDAuIFRoYW5rcyB0byBZYWtvdiBTaGFmcmFub3ZpY2guIAoqICBDT01QUkVTUy02MzI6ICBGaXhlcyBmb3IgZHVtcCBmaWxlIHBhcnNpbmcgIzQ0Mi4gVGhhbmtzIHRvIFlha292IFNoYWZyYW5vdmljaCwgR2FyeSBHcmVnb3J5LiAKKiAgQ09NUFJFU1MtNjMyOiAgSW1wcm92ZSBDUElPIGV4Y2VwdGlvbiBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nICM0NDEuIFRoYW5rcyB0byBZYWtvdiBTaGFmcmFub3ZpY2gsIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBEZXByZWNhdGUgU2tpcFNoaWVsZGluZ0lucHV0U3RyZWFtIHdpdGhvdXQgcmVwbGFjZW1lbnQgKG5vIGxvbmdlciB1c2VkKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBSZXVzZSBjb21tb25zLWNvZGVjLCBkb24ndCBkdXBsaWNhdGUgY2xhc3MgUHVyZUphdmFDcmMzMkMgKHJlbW92ZWQgcGFja2FnZS1wcml2YXRlIGNsYXNzKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBSZXVzZSBjb21tb25zLWNvZGVjLCBkb24ndCBkdXBsaWNhdGUgY2xhc3MgWFhIYXNoMzIgKGRlcHJlY2F0ZWQgY2xhc3MpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIFJldXNlIGNvbW1vbnMtaW8sIGRvbid0IGR1cGxpY2F0ZSBjbGFzcyBDaGFyc2V0cyAoZGVwcmVjYXRlZCBjbGFzcykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgUmV1c2UgY29tbW9ucy1pbywgZG9uJ3QgZHVwbGljYXRlIGNsYXNzIElPVXRpbHMgKGRlcHJlY2F0ZWQgbWV0aG9kcykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgUmV1c2UgY29tbW9ucy1pbywgZG9uJ3QgZHVwbGljYXRlIGNsYXNzIEJvdW5kZWRJbnB1dFN0cmVhbSAoZGVwcmVjYXRlZCBjbGFzcykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgUmV1c2UgY29tbW9ucy1pbywgZG9uJ3QgZHVwbGljYXRlIGNsYXNzIEZpbGVUaW1lcyAoZGVwcmVjYXRlZCBUaW1lVXRpbHMgbWV0aG9kcykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgUmV1c2UgQXJyYXlzLmVxdWFscyhieXRlW10sIGJ5dGVbXSkgYW5kIGRlcHJlY2F0ZSBBcmNoaXZlVXRpbHMuaXNFcXVhbChieXRlW10sIGJ5dGVbXSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgQWRkIGEgbnVsbC1jaGVjayBmb3IgdGhlIGNsYXNzIGxvYWRlciBvZiBPc2dpVXRpbHMgIzQ1MS4gVGhhbmtzIHRvIGFsdW1pLCBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgQWRkIGEgbnVsbC1jaGVjayBpbiBQYWNrMjAwLm5ld0luc3RhbmNlKFN0cmluZywgU3RyaW5nKS4gVGhhbmtzIHRvIGFsdW1pLCBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgRGVwcmVjYXRlIENoZWNrc3VtQ2FsY3VsYXRpbmdJbnB1dFN0cmVhbSBpbiBmYXZvciBvZiBqYXZhLnV0aWwuemlwLkNoZWNrZWRJbnB1dFN0cmVhbS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBEZXByZWNhdGUgQ1JDMzJWZXJpZnlpbmdJbnB1dFN0cmVhbS5DUkMzMlZlcmlmeWluZ0lucHV0U3RyZWFtKElucHV0U3RyZWFtLCBsb25nLCBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgQ09NUFJFU1MtNjU1OiAgRnJhbWVkU25hcHB5Q29tcHJlc3Nvck91dHB1dFN0cmVhbSBwcm9kdWNlcyBpbmNvcnJlY3Qgb3V0cHV0IHdoZW4gd3JpdGluZyBhIGxhcmdlIGJ1ZmZlciAjNDU3LiBUaGFua3MgdG8gY3ByZWlzbGVyLCBHYXJ5IEdyZWdvcnkuIAoqICBDT01QUkVTUy02NTc6ICBGaXggVEFSIGRpcmVjdG9yeSBlbnRyaWVzIGJlaW5nIG1pc2ludGVycHJldGVkIGFzIGZpbGVzICM0NjAuIFRoYW5rcyB0byBTZWJhc3RpYW4gU2NodWJlcnRoLCBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgRGVwcmVjYXRlIHVudXNlZCBtZXRob2QgRmlsZU5hbWVVdGlscy5nZXRCYXNlTmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIERlcHJlY2F0ZSB1bnVzZWQgbWV0aG9kIEZpbGVOYW1lVXRpbHMuZ2V0RXh0ZW5zaW9uKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgQXJjaGl2ZUlucHV0U3RyZWFtLkJvdW5kZWRJbnB1dFN0cmVhbS5yZWFkKCkgaW5jb3JyZWN0bHkgYWRkcyAxIGZvciBFT0YgdG8gdGhlIGJ5dGVzIHJlYWQgY291bnQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgRGVwcmVjYXRlIElPVXRpbHMucmVhZChGaWxlLCBieXRlW10pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIERlcHJlY2F0ZSBJT1V0aWxzLmNvcHlSYW5nZShJbnB1dFN0cmVhbSwgbG9uZywgT3V0cHV0U3RyZWFtLCBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgQ09NUFJFU1MtNjUzOiAgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSBtdWx0aSBhcmNoaXZlIHVwZGF0ZXMgbWV0YWRhdGEgaW4gaW5jb3JyZWN0IGZpbGUgIzQ1NS4gVGhhbmtzIHRvIFpieW5layBWeXNrb3Zza3ksIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBEZXByZWNhdGUgQnl0ZVV0aWxzLklucHV0U3RyZWFtQnl0ZVN1cHBsaWVyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIERlcHJlY2F0ZSBCeXRlVXRpbHMuZnJvbUxpdHRsZUVuZGlhbihJbnB1dFN0cmVhbSwgaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgICBEZXByZWNhdGUgQnl0ZVV0aWxzLnRvTGl0dGxlRW5kaWFuKERhdGFPdXRwdXQsIGxvbmcsIGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgUmVkdWNlIGR1cGxpY2F0aW9uIGJ5IGhhdmluZyBBcmNoaXZlSW5wdXRTdHJlYW0gZXh0ZW5kIEZpbHRlcklucHV0U3RyZWFtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIFN1cHBvcnQgcHJlYW1ibGUgZ2FyYmFnZSBpbiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gIzQ3MS4gVGhhbmtzIHRvIFpieW5layBWeXNrb3Zza3ksIEdhcnkgR3JlZ29yeS4gCiogIENPTVBSRVNTLTY1ODogIEZpeCBmb3JtYXR0aW5nIHRoZSBsb3dlc3QgZXhwcmVzc2FibGUgRE9TIHRpbWUgIzQ3Mi4gVGhhbmtzIHRvIEFybm91dCBFbmdlbGVuLiAKKiAgICAgICAgICAgIERyb3AgcmVmbGVjdGlvbiBmcm9tIEV4dHJhRmllbGRVdGlscyBzdGF0aWMgaW5pdGlhbGl6YXRpb24gIzQ4MC4gVGhhbmtzIHRvIFJvbWFpbiBNYW5uaS1CdWNhdSwgR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIFByZXNlcnZlIGV4Y2VwdGlvbiBjYXVzYXRpb24gaW4gRXh0cmFGaWVsZFV0aWxzLnJlZ2lzdGVyKENsYXNzKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCgpDaGFuZ2VzCi0tLS0tLS0KCiogICAgICAgICAgICBCdW1wIGNvbW1vbnMtbGFuZzMgZnJvbSAzLjEzLjAgdG8gMy4xNC4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgIEJ1bXAgY29tLmdpdGh1Yi5tYXJzY2hhbGw6bWVtb3J5ZmlsZXN5c3RlbSBmcm9tIDIuNi4xIHRvIDIuOC4wICM0NDQsICM0NTguIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiAgICAgICAgICAgIEJ1bXAgY29tbW9ucy1pbyBmcm9tIDIuMTUuMCB0byAyLjE1LjEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICAgQnVtcCBvcmcuYXBhY2hlLmNvbW1vbnM6Y29tbW9ucy1wYXJlbnQgZnJvbSA2NCB0byA2Ni4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqICAgICAgICAgICAgQnVtcCBjb20uZ2l0aHViLmx1YmVuOnpzdGQtam5pIGZyb20gMS41LjUtMTAgdG8gMS41LjUtMTEgIzQ0OC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqICAgICAgICAgICAgQnVtcCBvcmcuc2xmNGo6c2xmNGotYXBpIGZyb20gMi4wLjkgdG8gMi4wLjEyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogICAgICAgICAgICBBZGQgZGVwZW5kZW5jeSBvbiBjb21tb25zLWNvZGVjOmNvbW1vbnMtY29kZWM6MS4xNi4xLgoqICAgICAgICAgICAgQWRkIGRlcGVuZGVuY3kgb24gb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtbGFuZzM6My4xNC4wLgoqICAgICAgICAgICAgQWRkIGRlcGVuZGVuY3kgb24gY29tbW9ucy1pbzpjb21tb25zLWlvOjIuMTUuMS4KCgpSZXNvdXJjZXMKLS0tLS0tLS0tCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29tcHJlc3MvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIENvbXByZXNzLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29tcHJlc3MvCgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb21wcmVzcy9kb3dubG9hZF9pby5jZ2kKCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgVGVhbQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkFwYWNoZSBDb21tb25zIENvbXByZXNzIApWZXJzaW9uIDEuMjUuMApSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpBcGFjaGUgQ29tbW9ucyBDb21wcmVzcyBkZWZpbmVzIGFuIEFQSSBmb3Igd29ya2luZyB3aXRoIGNvbXByZXNzaW9uIGFuZAphcmNoaXZlIGZvcm1hdHMuICBUaGVzZSBpbmNsdWRlOiBiemlwMiwgZ3ppcCwgcGFjazIwMCwgTFpNQSwgWFosIFNuYXBweSwKdHJhZGl0aW9uYWwgVW5peCBDb21wcmVzcywgREVGTEFURSwgREVGTEFURTY0LCBMWjQsIEJyb3RsaSwgWnN0YW5kYXJkIGFuZAphciwgY3BpbywgamFyLCB0YXIsIHppcCwgZHVtcCwgN3osIGFyai4KCkFwYWNoZSBDb21tb25zIENvbXByZXNzIGRlZmluZXMgYW4gQVBJIGZvciB3b3JraW5nIHdpdGgKY29tcHJlc3Npb24gYW5kIGFyY2hpdmUgZm9ybWF0cy4gIFRoZXNlIGluY2x1ZGU6IGJ6aXAyLCBnemlwLCBwYWNrMjAwLApMWk1BLCBYWiwgU25hcHB5LCB0cmFkaXRpb25hbCBVbml4IENvbXByZXNzLCBERUZMQVRFLCBERUZMQVRFNjQsIExaNCwKQnJvdGxpLCBac3RhbmRhcmQgYW5kIGFyLCBjcGlvLCBqYXIsIHRhciwgemlwLCBkdW1wLCA3eiwgYXJqLgoKTWlub3IgZmVhdHVyZSBhbmQgbWFpbnRlbmFuY2UgcmVsZWFzZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogICAgICAgICAgIEFkZCBHemlwUGFyYW1ldGVycy5nZXRGaWxlTmFtZSgpIGFuZCBkZXByZWNhdGUgZ2V0RmlsZW5hbWUoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBHemlwUGFyYW1ldGVycy5zZXRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgc2V0RmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBGaWxlTmFtZVV0aWwuZ2V0Q29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBnZXRDb21wcmVzc2VkRmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBGaWxlTmFtZVV0aWwuZ2V0VW5jb21wcmVzc2VkRmlsZU5hbWUoU3RyaW5nKSBhbmQgZGVwcmVjYXRlIGdldFVuY29tcHJlc3NlZEZpbGVuYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBBZGQgRmlsZU5hbWVVdGlsLmlzQ29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBpc0NvbXByZXNzZWRGaWxlbmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIEJaaXAyVXRpbHMuZ2V0Q29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBnZXRDb21wcmVzc2VkRmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBCWmlwMlV0aWxzLmdldFVuY29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBnZXRVbmNvbXByZXNzZWRGaWxlbmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIEJaaXAyVXRpbHMuaXNDb21wcmVzc2VkRmlsZU5hbWUoU3RyaW5nKSBhbmQgZGVwcmVjYXRlIGlzQ29tcHJlc3NlZEZpbGVuYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBBZGQgTFpNQVV0aWxzLmdldENvbXByZXNzZWRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgZ2V0Q29tcHJlc3NlZEZpbGVuYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBBZGQgTFpNQVV0aWxzLmdldFVuY29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBnZXRVbmNvbXByZXNzZWRGaWxlbmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIExaTUFVdGlscy5pc0NvbXByZXNzZWRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgaXNDb21wcmVzc2VkRmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBYWVV0aWxzLmdldENvbXByZXNzZWRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgZ2V0Q29tcHJlc3NlZEZpbGVuYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBBZGQgWFlVdGlscy5nZXRVbmNvbXByZXNzZWRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgZ2V0VW5jb21wcmVzc2VkRmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBYWVV0aWxzLmlzQ29tcHJlc3NlZEZpbGVOYW1lKFN0cmluZykgYW5kIGRlcHJlY2F0ZSBpc0NvbXByZXNzZWRGaWxlbmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIEd6aXBVdGlscy5nZXRDb21wcmVzc2VkRmlsZU5hbWUoU3RyaW5nKSBhbmQgZGVwcmVjYXRlIGdldENvbXByZXNzZWRGaWxlbmFtZShTdHJpbmcpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIEd6aXBVdGlscy5nZXRVbmNvbXByZXNzZWRGaWxlTmFtZShTdHJpbmcpIGFuZCBkZXByZWNhdGUgZ2V0VW5jb21wcmVzc2VkRmlsZW5hbWUoU3RyaW5nKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBHemlwVXRpbHMuaXNDb21wcmVzc2VkRmlsZU5hbWUoU3RyaW5nKSBhbmQgZGVwcmVjYXRlIGlzQ29tcHJlc3NlZEZpbGVuYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBBZGQgU2V2ZW5aT3V0cHV0RmlsZS5wdXRBcmNoaXZlRW50cnkoU2V2ZW5aQXJjaGl2ZUVudHJ5KSBhbmQgZGVwcmVjYXRlIHB1dEFyY2hpdmVFbnRyeShBcmNoaXZlRW50cnkpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIGdlbmVyaWNzIHRvIENoYW5nZVNldCBhbmQgQ2hhbmdlU2V0UGVyZm9ybWVyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQWRkIGdlbmVyaWNzIHRvIEFyY2hpdmVTdHJlYW1Qcm92aWRlciBhbmQgZnJpZW5kcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBhIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIgdG8gQXJjaGl2ZU91dHB1dFN0cmVhbSBhbmQgYXZvaWQgdW5jaGVja2VkL3VuY29uZmlybWVkIHR5cGUgY2FzdHMgaW4gc3ViY2xhc3Nlcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIEFkZCBhIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIgdG8gQXJjaGl2ZUlucHV0U3RyZWFtIGFuZCBkZXByZWNhdGUgcmVkdW5kYW50IGdldCBtZXRob2RzIGluIHN1YmNsYXNzZXMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIENPTVBSRVNTLTY0ODogIEFkZCBhYmlsaXR5IHRvIHJlc3RyaWN0IGF1dG9kZXRlY3Rpb24gaW4gQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkgIzQzMy4gVGhhbmtzIHRvIFlha292IFNoYWZyYW5vdmljaCwgR2FyeSBHcmVnb3J5LiAKCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqICAgICAgICAgICBQcmVjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBBckFyY2hpdmVJbnB1dFN0cmVhbS5pc0JTRExvbmdOYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBQcmVjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBBckFyY2hpdmVJbnB1dFN0cmVhbS5pc0dOVUxvbmdOYW1lKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBQcmVjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBUYXJBcmNoaXZlRW50cnkucGFyc2VJbnN0YW50RnJvbURlY2ltYWxTZWNvbmRzKFN0cmluZykuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBQcmVjb21waWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBDaGFuZ2VTZXQuYWRkRGVsZXRpb24oQ2hhbmdlKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQ09NUFJFU1MtNjQ5OiAgSW1wcm92ZSBwZXJmb3JtYW5jZSBpbiBCbG9ja0xaNENvbXByZXNzb3JPdXRwdXRTdHJlYW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBOdWxsLWd1YXJkIExpc3Rlci5tYWluKFN0cmluZ1tdKSBmb3IgcHJvZ3JhbW1hdGljIGludm9jYXRpb24uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBOUEUgaW4gcGFjazIwMC5OZXdBdHRyaWJ1dGVCYW5kcy5SZWZlcmVuY2UuYWRkQXR0cmlidXRlVG9CYW5kKE5ld0F0dHJpYnV0ZSwgSW5wdXRTdHJlYW0pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgSW5jb3JyZWN0IGxhenkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZSBvZiBzdGF0aWMgZmllbGQgaW4gcGFjazIwMC5Db2RlY0VuY29kaW5nLmdldFNwZWNpZmllcihDb2RlYywgQ29kZWMpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgSW5jb3JyZWN0IHN0cmluZyBjb21wYXJpc29uIGluIHVucGFjazIwMC5BdHRyaWJ1dGVMYXlvdXQubnVtQmFja3dhcmRzQ2FsbGFibGVzKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBJbmVmZmljaWVudCB1c2Ugb2Yga2V5U2V0IGl0ZXJhdG9yIGluc3RlYWQgb2YgZW50cnlTZXQgaXRlcmF0b3IgaW4gcGFjazIwMC5QYWNraW5nT3B0aW9ucy5hZGRPclVwZGF0ZUF0dHJpYnV0ZUFjdGlvbnMoTGlzdCwgTWFwLCBpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgUGFja2FnZSBwcml2YXRlIGNsYXNzIHBhY2syMDAuSWNCYW5kcy5JY1R1cGxlIHNob3VsZCBiZSBhIHN0YXRpYyBpbm5lciBjbGFzcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogICAgICAgICAgIFByaXZhdGUgY2xhc3MgWmlwRmlsZS5Cb3VuZGVkRmlsZUNoYW5uZWxJbnB1dFN0cmVhbSBzaG91bGQgYmUgYSBzdGF0aWMgaW5uZXIgY2xhc3MuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBSZWZhY3RvciBpbnRlcm5hbCBTZXZlblogQUVTMjU2U0hBMjU2RGVjb2RlciBJbnB1dFN0cmVhbSBpbnRvIGEgbmFtZWQgc3RhdGljIGlubmVyIGNsYXNzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgUmVmYWN0b3IgaW50ZXJuYWwgU2V2ZW5aIEFFUzI1NlNIQTI1NkRlY29kZXIgT3V0cHV0U3RyZWFtIGludG8gYSBuYW1lZCBzdGF0aWMgaW5uZXIgY2xhc3MuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBVc2UgdGhlIHJvb3QgTG9jYWxlIGZvciBzdHJpbmcgY29udmVyc2lvbiBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbiBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuYXJjaGl2ZXJzLnNldmVuei5DTEkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqICAgICAgICAgICBDYWxsaW5nIFBhY2tpbmdVdGlscy5jb25maWcoUGFja2luZ09wdGlvbnMpIHdpdGggbnVsbCBub3cgY2xvc2VzIHRoZSBpbnRlcm5hbCBGaWxlSGFuZGxlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQ09NUFJFU1MtNjUwOiAgTFo0IGNvbXByZXNzb3IgdGhyb3dzIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uIFRoYW5rcyB0byBDaGFkIFByZWlzbGVyLiAKKiBDT01QUkVTUy02MzI6ICBMWldJbnB1dFN0cmVhbS5pbml0aWFsaXplVGFibGVzKGludCkgc2hvdWxkIHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbnN0ZWFkIG9mIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4gVGhhbmtzIHRvIFlha292IFNoYWZyYW5vdmljaCwgR2FyeSBHcmVnb3J5LiAKKiBDT01QUkVTUy02NDc6ICBUaHJvdyBJT0V4Y2VwdGlvbiBpbnN0ZWFkIG9mIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB3aGVuIHJlYWRpbmcgWmlwIHdpdGggZGF0YSBkZXNjcmlwdG9yIGVudHJpZXMuIFRoYW5rcyB0byBSb2JpbiBTY2hpbXBmLCBHYXJ5IEdyZWdvcnkuIAoKQ2hhbmdlcwotLS0tLS0tCiogICAgICAgICAgIEJ1bXAgb3JnLnNsZjRqOnNsZjRqLWFwaSBmcm9tIDIuMC44IHRvIDIuMC45ICM0MTMuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiAgICAgICAgICAgQnVtcCBjb21tb25zLWlvOmNvbW1vbnMtaW8gZnJvbSAyLjEzLjAgdG8gMi4xNS4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiAgICAgICAgICAgQnVtcCBjb20uZ2l0aHViLmx1YmVuOnpzdGQtam5pIGZyb20gMS41LjUtNSB0byAxLjUuNS0xMCAjNDIyLCAjNDMxLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogICAgICAgICAgIEJ1bXAgb3JnLm93Mi5hc206YXNtIGZyb20gOS41IHRvIDkuNiAjNDIxLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogICAgICAgICAgIEJ1bXAgb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtcGFyZW50IGZyb20gNjIgdG8gNjQgIzQyMS4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4gCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbXByZXNzL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIENvbW1vbnMgQ29tcHJlc3Mgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbXByZXNzLwoKRG93bmxvYWQgcGFnZTogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29tcHJlc3MvZG93bmxvYWRfaW8uY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIENvbXByZXNzIDEuMjQuMCBSRUxFQVNFIE5PVEVTCgpBcGFjaGUgQ29tbW9ucyBDb21wcmVzcyBkZWZpbmVzIGFuIEFQSSBmb3Igd29ya2luZyB3aXRoCmNvbXByZXNzaW9uIGFuZCBhcmNoaXZlIGZvcm1hdHMuICBUaGVzZSBpbmNsdWRlOiBiemlwMiwgZ3ppcCwgcGFjazIwMCwKTFpNQSwgWFosIFNuYXBweSwgdHJhZGl0aW9uYWwgVW5peCBDb21wcmVzcywgREVGTEFURSwgREVGTEFURTY0LCBMWjQsCkJyb3RsaSwgWnN0YW5kYXJkIGFuZCBhciwgY3BpbywgamFyLCB0YXIsIHppcCwgZHVtcCwgN3osIGFyai4KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBNYWtlIFppcEFyY2hpdmVFbnRyeS5nZXRMb2NhbEhlYWRlck9mZnNldCgpIHB1YmxpYy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBVc2UgdHJ5LXdpdGgtcmVzb3VyY2VzIGluIEFyY2hpdmVTdHJlYW1GYWN0b3J5ICMzOTEuIFRoYW5rcyB0byBEYW5pZWxlIEdhbGxvcHBvLiAKKiBKYXZhZG9jIGFuZCBjb2RlIGNvbW1lbnRzOiBTYW5pdGl6ZSBncmFtbWFyIGlzc3VlcyBhbmQgdHlwb3MgIzM5My4gVGhhbmtzIHRvIE1hcnRpbiBXaWVzbmVyLiAKKiBSZW1vdmUgcmVkdW5kYW50IChudWxsKSBpbml0aWFsaXphdGlvbnMgIzM5NC4gVGhhbmtzIHRvIE1hcnRpbiBXaWVzbmVyLiAKKiBbU3RlcFNlY3VyaXR5XSBjaTogSGFyZGVuIEdpdEh1YiBBY3Rpb25zICMzOTYuIFRoYW5rcyB0byBzdGVwLXNlY3VyaXR5LWJvdCwgR2FyeSBHcmVnb3J5LiAKCkNoYW5nZXMKLS0tLS0tLQoqIEJ1bXAgenN0ZC1qbmkgZnJvbSAxLjUuNC0yIHRvIDEuNS41LTUgIzM3NywgIzM4MywgIzM4OCwgIzM5MCwgIzQwMC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqIEJ1bXAgbWVtb3J5ZmlsZXN5c3RlbSBmcm9tIDIuNS4wIHRvIDIuNi4xICMzODEsICMzODUsICMzODcuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIGNvbW1vbnMtcGFyZW50IGZyb20gNTYgdG8gNjEgIzM4NC4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4gCiogQnVtcCBjb21tb25zLWlvOmNvbW1vbnMtaW8gZnJvbSAyLjExLjAgdG8gMi4xMy4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBCdW1wIGNvbW1vbnMtbGFuZzMgZnJvbSAzLjEyLjAgdG8gMy4xMy4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBCdW1wIG9yZy5zbGY0ajpzbGY0ai1hcGkgZnJvbSAyLjAuNyB0byAyLjAuOC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29tcHJlc3MsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMKb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LApzZWUgdGhlIEFwYWNoZSBDb21tb25zIENvbXByZXNzIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb21wcmVzcy8KCkRvd25sb2FkIGl0IGZyb20gaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvY29tcHJlc3MvZG93bmxvYWRfY29tcHJlc3MuY2dpCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcyAxLjIzLjAgUkVMRUFTRSBOT1RFUwoKQXBhY2hlIENvbW1vbnMgQ29tcHJlc3MgZGVmaW5lcyBhbiBBUEkgZm9yIHdvcmtpbmcgd2l0aApjb21wcmVzc2lvbiBhbmQgYXJjaGl2ZSBmb3JtYXRzLiAgVGhlc2UgaW5jbHVkZTogYnppcDIsIGd6aXAsIHBhY2syMDAsCkxaTUEsIFhaLCBTbmFwcHksIHRyYWRpdGlvbmFsIFVuaXggQ29tcHJlc3MsIERFRkxBVEUsIERFRkxBVEU2NCwgTFo0LApCcm90bGksIFpzdGFuZGFyZCBhbmQgYXIsIGNwaW8sIGphciwgdGFyLCB6aXAsIGR1bXAsIDd6LCBhcmouCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogVXNlIEZpbGVUaW1lIGZvciB0aW1lIGZpZWxkcyBpbiBTZXZlblppcEFyY2hpdmVFbnRyeSAjMjU2LgogIElzc3VlOiBDT01QUkVTUy02MTQuIFRoYW5rcyB0byBBbmRyZSBCcmFpdCwgR2FyeSBHcmVnb3J5LiAKKiBGaXggY2FsY3VsYXRpb24gdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgWklQIGNlbnRyYWwgZGlyZWN0b3J5IGVudHJ5ICMzMzQuCiAgSXNzdWU6IENPTVBSRVNTLTYyMS4gVGhhbmtzIHRvIEdsYXZvLiAKKiBBZGQgZW5jcnlwdGlvbiBzdXBwb3J0IGZvciBTZXZlblogIzMzMi4KICBJc3N1ZTogQ09NUFJFU1MtNjMzLiBUaGFua3MgdG8gRGFuaWVsIFNhbnRvcywgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuIAoqIFN1cHBvcnQgZm9yIGV4dHJhIHRpbWUgZGF0YSBpbiBaaXAgYXJjaGl2ZXMgIzM0NS4KICBJc3N1ZTogQ09NUFJFU1MtNjEzLiBUaGFua3MgdG8gQW5kcmUgQnJhaXQsIEdhcnkgR3JlZ29yeSwgQnJ1bm8gUC4gS2lub3NoaXRhLiAKKiBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmFyY2hpdmVycy56aXAuRGVmYXVsdEJhY2tpbmdTdG9yZVN1cHBsaWVyIHRvIHdyaXRlIHRvIGEgY3VzdG9tIGZvbGRlciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHRlbXBvcmFyeSBmb2xkZXIuCiAgSXNzdWU6IENPTVBSRVNTLTYyMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQWRkIGNhcGFiaWxpdHkgdG8gY29uZmlndXJlIERlZmxhdGVyIHN0cmF0ZWd5IGluIEd6aXBDb21wcmVzc29yT3V0cHV0U3RyZWFtOiBHemlwUGFyYW1ldGVycy5zZXREZWZsYXRlU3RyYXRlZ3koaW50KS4KICBJc3N1ZTogQ09NUFJFU1MtNjAwLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBQYXNjYWwgRGF2b3VzdC4gCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBJbXBsaWNpdCBuYXJyb3dpbmcgY29udmVyc2lvbiBpbiBjb21wb3VuZCBhc3NpZ25tZW50LiBUaGFua3MgdG8gQ29kZVFMLCBHYXJ5IEdyZWdvcnkuIAoqIEF2b2lkIE5QRSBpbiBGaWxlTmFtZVV0aWxzLmdldEJhc2VOYW1lKFBhdGgpIGZvciBwYXRocyB3aXRoIHplcm8gZWxlbWVudHMgbGlrZSByb290IHBhdGhzLiBUaGFua3MgdG8gQ29kZVFMLCBHYXJ5IEdyZWdvcnkuIAoqIEF2b2lkIE5QRSBpbiBGaWxlTmFtZVV0aWxzLmdldEV4dGVuc2lvbihQYXRoKSBmb3IgcGF0aHMgd2l0aCB6ZXJvIGVsZW1lbnRzIGxpa2Ugcm9vdCBwYXRocy4gVGhhbmtzIHRvIENvZGVRTCwgR2FyeSBHcmVnb3J5LiAKKiBMWk1BMkRlY29kZXIuZGVjb2RlKCkgbG9vc2VzIG9yaWdpbmFsIGV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogRXh0cmFjdCBjb25kaXRpb25zIGFuZCBhdm9pZCBkdXBsaWNhdGUgY29kZS4gIzI5Ny4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuIAoqIFJlbW92ZSBkdXBsaWNhdGUgY29uZGl0aW9ucy4gVXNlIHN3aXRjaCBpbnN0ZWFkLiAjMjk4LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4gCiogUmVwbGFjZSBKVW5pdCAzIGFuZCA0IHdpdGggSlVuaXQgNSAjMzQ0LCAjMzQ2LiBUaGFua3MgdG8gUm9iaW4gU2NoaW1wZi4gCiogTWFrZSAnWmlwRmlsZS5vZmZzZXRDb21wYXJhdG9yJyBzdGF0aWMgIzM1My4gVGhhbmtzIHRvIEdsYXZvLiAKKiBUaGUgR3ppcENvbXByZXNzb3JPdXRwdXRTdHJlYW0jd3JpdGVIZWFkZXIoKSB1c2VzIElTT184ODU5XzEgdG8gd3JpdGUgdGhlIGZpbGUgbmFtZSBhbmQgY29tbWVudC4gCiAgSWYgdGhlIHN0cmluZ3MgY29udGFpbnMgbm9uLUlTT184ODU5XzEgY2hhcmFjdGVycywgdW5rbm93biBjaGFyYWN0ZXJzIGFyZSBkaXNwbGF5ZWQgYWZ0ZXIgZGVjb21wcmVzc2lvbi4gCiAgVXNlIHBlcmNlbnQgZW5jb2RpbmcgZm9yIG5vbiBJU09fODg1OV8xIGNoYXJhY3RlcnMuCiAgSXNzdWU6IENPTVBSRVNTLTYzOC4gVGhhbmtzIHRvIFJhZGFyIHdlbiwgR2FyeSBHcmVnb3J5LCBNaWNoYWVsIE9zaXBvdi4gCiogUG9ydCBzb21lIGNvZGUgZnJvbSBJTyB0byBOSU8gQVBJcy4gVGhhbmtzIHRvIEpvbmF0aGFuIExlaXRzY2h1aCwgR2FyeSBHcmVnb3J5LiAKKiBwYWNrMjAwOiBGaXggRmlsZUJhbmRzIG1pc3VzaW5nIElucHV0U3RyZWFtI3JlYWQoYnl0ZVtdKSAjMzYwLiBUaGFua3MgdG8gVW5hLCBHYXJ5IEdyZWdvcnksIEpvY2hlbiBXaWVkbWFubiwgcXVhdGVybmFyeSwgQnJ1bm8gUC4gS2lub3NoaXRhLiAKKiBBZGQgVGFyQXJjaGl2ZUVudHJ5LmdldExpbmtGbGFnKCkgIzM2NS4KICBJc3N1ZTogQ09NUFJFU1MtNjQxLiBUaGFua3MgdG8gWGVub0FtZXNzLCBHYXJ5IEdyZWdvcnksIEJydW5vIFAuIEtpbm9zaGl0YS4gCiogSW50ZWdlciBvdmVyZmxvdyBBcml0aG1ldGljRXhjZXB0aW9uIGluIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0gIzM2OC4KICBJc3N1ZTogQ09NUFJFU1MtNjQyLiBUaGFua3MgdG8gQW50b24gS2xhculuLCBHYXJ5IEdyZWdvcnkuIAoqIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMuemlwLlppcEZpbGUuZmluYWxpemUoKSBzaG91bGQgbm90IHdyaXRlIHRvIHN0ZCBlcnIuCiAgSXNzdWU6IENPTVBSRVNTLTY0Mi4gVGhhbmtzIHRvIERvbWluaWsgU3RhZGxlciwgU3RlZmFuIEJvZGV3aWcsIEdhcnkgR3JlZ29yeS4gCgpDaGFuZ2VzCi0tLS0tLS0KKiBCdW1wIG1vY2tpdG8udmVyc2lvbiBmcm9tIDQuOC4wIHRvIDQuMTEuMCAjMzI4LCAjMzMxLCAjMzQwLCAjMzQ4LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogQnVtcCBwbWQgZnJvbSA2LjUwLjAgdG8gNi41My4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBCdW1wIG1lbW9yeWZpbGVzeXN0ZW0gZnJvbSAyLjMuMCB0byAyLjUuMCAjMzMwLCAjMzU5LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogQnVtcCBzbGY0ai1hcGkgZnJvbSAyLjAuMyB0byAyLjAuNyAjMzI5LCAjMzMzLCAjMzQxLCAjMzcxLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogQnVtcCBqYXBpY21wIGZyb20gMC4xNi4wIHRvIDAuMTcuMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQnVtcCBjb21tb25zLXBhcmVudCBmcm9tIDU0IHRvIDU2ICMzMzksICMzNDkuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIHpzdGQtam5pIGZyb20gMS41LjItNSB0byAxLjUuNC0yICMzNjIsICMzNjQuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKClJlbW92ZWQ6CiogUmVtb3ZlIEJaaXAyQ29tcHJlc3Nvck91dHB1dFN0cmVhbS5maW5hbGl6ZSgpIHdoaWNoIG9ubHkgd3JvdGUgdG8gc3RkIGVyci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcywgaW5jbHVkaW5nIGluc3RydWN0aW9ucwpvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsCnNlZSB0aGUgQXBhY2hlIENvbW1vbnMgQ29tcHJlc3Mgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2NvbXByZXNzLwoKRG93bmxvYWQgaXQgZnJvbSBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb21wcmVzcy9kb3dubG9hZF9jb21wcmVzcy5jZ2kKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMjIKLS0tLS0tLS0tLS0tCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogTWlncmF0ZSB6aXAgcGFja2FnZSB0byB1c2UgTklPICMyMzYuCiAgSXNzdWU6IENPTVBSRVNTLTYwMi4gVGhhbmtzIHRvIFBvc3RlbG5pY3UgR2VvcmdlLCBHYXJ5IEdyZWdvcnkuIAoqIEFkZCBBUEsgZmlsZSBleHRlbnNpb24gY29uc3RhbnRzOiBBcmNoaXZlU3RyZWFtRmFjdG9yeS5BUEssIEFQS00sIEFQS1MsIFhBUEsuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIEFyY2hpdmVTdHJlYW1GYWN0b3J5LmNyZWF0ZUFyY2hpdmVJbnB1dFN0cmVhbShTdHJpbmcsIElucHV0U3RyZWFtLCBTdHJpbmcpIHN1cHBvcnRzIHRoZSAiQVBLIiBmb3JtYXQgKGl0J3MgYSBKQVIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBFeHBhbmRlciBleGFtcGxlIG5vdyBoYXMgTklPIFBhdGggdmVyc2lvbnMgb2YgSU8gRmlsZSBBUElzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBJbXByb3ZlIFRBUiBzdXBwb3J0IGZvciBmaWxlIHRpbWVzICMyNTQuCiAgSXNzdWU6IENPTVBSRVNTLTYxMi4gVGhhbmtzIHRvIEFuZHJlIEJyYWl0LCBHYXJ5IEdyZWdvcnkuIAoqIEFkZCBTZXZlblpBcmNoaXZlRW50cnkuc2V0Q29udGVudE1ldGhvZHMoU2V2ZW5aTWV0aG9kQ29uZmlndXJhdGlvbi4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogRml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgaW4gcGFjazIwMCBwYWNrYWdlcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQ2xvc2UgRmlsZSBpbnB1dCBzdHJlYW0gYWZ0ZXIgdW5wYWNraW5nIGluIFBhY2syMDBVbnBhY2tlckFkYXB0ZXIudW5wYWNrKEZpbGUsIEphck91dHB1dFN0cmVhbSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIFBhY2syMDBVbnBhY2tlckFkYXB0ZXIudW5wYWNrKElucHV0U3RyZWFtLCBKYXJPdXRwdXRTdHJlYW0pIHNob3VsZCBub3QgY2xvc2UgaXRzIGdpdmVuIGlucHV0IHN0cmVhbS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogRml4IG1pbm9yIHByb2JsZW0gaW4gZXhhbXBsZXMuCiAgSXNzdWU6IENPTVBSRVNTLTU5Ni4gVGhhbmtzIHRvIFRhbWFzIE11Y3MuIAoqIEFkZCBhIGxpbWl0IHRvIHRoZSBjb3B5IGJ1ZmZlciBpbiBJT1V0aWxzLnJlYWRSYW5nZSgpIHRvCiAgYXZvaWQgcmVhZGluZyBtb3JlIGZyb20gYSBjaGFubmVsIHRoYW4gYXNrZWQgZm9yLgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzIxNC4KICBJc3N1ZTogQ09NUFJFU1MtNTg0LiBUaGFua3MgdG8gTWF0dGhpanMgTGFhbiwgUGV0ZXIgTGVlLiAKKiBEb2N1bWVudGF0aW9uIG5pdHMgIzIxNy4gVGhhbmtzIHRvIEhlbGRlciBNYWdhbGjjZXMsIEdhcnkgR3JlZ29yeSwgUGV0ZXJBbGZyZWRMZWUuIAoqIFJlcGxhY2Ugd3JhcHBlciBDb2xsZWN0aW9ucy5zb3J0IGlzIHdpdGggYW4gaW5zdGFuY2UgbWV0aG9kIGRpcmVjdGx5LiAjMjQ1LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4gCiogUmVwbGFjZSBtYW51YWwgY29tcGFyaXNvbnMgd2l0aCBDb21wYXJhdG9yLmNvbXBhcmluZ0ludCgpICMyNDQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKKiBSZXBsYWNlIG1hbnVhbCBjb3B5IG9mIGFycmF5IGNvbnRlbnRzIHdpdGggU3lzdGVtLmFycmF5Y29weSgpICMyNDYuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKKiBGaXggdGhyZWFkIHNhZmV0eSBpc3N1ZXMgd2hlbiBlbmNvZGluZyA3eiBwYXNzd29yZCAjMjQ4LiBUaGFua3MgdG8gR2xhdm8sIEJydW5vIFAuIEtpbm9zaGl0YSwgUGV0ZXJBbGZyZWRMZWUsIEdhcnkgR3JlZ29yeS4gCiogYnppcDI6IGNhbGN1bGF0ZSBtZWRpYW4tb2YtMyBvbiB1bnNpZ25lZCB2YWx1ZXMgIzI0Mi4gVGhhbmtzIHRvIFBldGVyIERldHRtYW4uIAoqIFVzZSBNYXRoLm1pbiBhbmQgTWF0aC5tYXggY2FsY3VsYXRpb25zLiAjMjQ3LiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbCwgR2FyeSBHcmVnb3J5LCBCcnVubyBQLiBLaW5vc2hpdGEuIAoqIEV4cGFuZGVyIHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgaWYgYW4gZW50cnkncyBuYW1lIGlzICIuLyIuCiAgSXNzdWU6IENPTVBSRVNTLTYwMy4gVGhhbmtzIHRvIE1hdHQgU2lja2VyLiAKKiBFbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIEphdmEgOCAjMjUyLgogIElzc3VlOiBDT01QUkVTUy02MDQuIFRoYW5rcyB0byBBbmRyZSBCcmFpdC4gCiogVXNlIFN0cmluZ0J1aWxkZXIgaW5zdGVhZCBvZiBTdHJpbmdCdWZmZXIuICMyODQuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKKiBJbmxpbmUgdmFyaWFibGUuIFJlbW92ZSByZWR1bmRhbnQgbG9jYWwgdmFyaWFibGUuICMyODMuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKKiBVc2UgY29tcGFyZSBtZXRob2QgIzI4NS4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuIAoqIFJlbW92ZSBVbm5lY2Vzc2FyeSBpbnRlcmZhY2UgbW9kaWZpZXJzICMyODEuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKKiBBdm9pZCB1c2UgQy1zdHlsZSBhcnJheSBkZWNsYXJhdGlvbi4gIzI4Mi4gVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuIAoqIENoZWNrc3VtVmVyaWZ5aW5nSW5wdXRTdHJlYW0ucmVhZCgpIGRvZXMgbm90IGFsd2F5cyB2YWxpZGF0ZSBjaGVja3N1bSBhdCBlbmQtb2Ytc3RyZWFtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKKiBGaXggVGFyRmlsZVRlc3QgIzI4OS4gVGhhbmtzIHRvIE1hdHQgSnVudHVuZW4uIAoqIFVwZGF0ZSBXaWtpcGVkaWEgbGluayBpbiBUYXJVdGlscy5qYXZhOjYyNy4KICBJc3N1ZTogQ09NUFJFU1MtNjI1LiBUaGFua3MgdG8gTXJCdW1wLCBHYXJ5IEdyZWdvcnkuIAoqIE91dE9mTWVtb3J5RXJyb3Igb24gbWFsZm9ybWVkIHBhY2syMDAgaW5wdXQgKGF0dHJpYnV0ZXMpLgogIElzc3VlOiBDT01QUkVTUy02MjYuIFRoYW5rcyB0byBBbmRyaWkgSHVkeiwgR2FyeSBHcmVnb3J5LiAKKiBPdXRPZk1lbW9yeUVycm9yIG9uIG1hbGZvcm1lZCBwYWNrMjAwIGlucHV0IChvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuaGFybW9ueS5wYWNrMjAwLk5ld0F0dHJpYnV0ZUJhbmRzLnJlYWROZXh0VW5pb25DYXNlKS4KICBJc3N1ZTogQ09NUFJFU1MtNjI4LiBUaGFua3MgdG8gQW5kcmlpIEh1ZHosIEdhcnkgR3JlZ29yeS4gCiogT3V0T2ZNZW1vcnlFcnJvciBvbiBtYWxmb3JtZWQgdW5wYWNrMjAwIGlucHV0IChvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuaGFybW9ueS51bnBhY2syMDAuTmV3QXR0cmlidXRlQmFuZHMucmVhZE5leHRVbmlvbkNhc2UpLgogIElzc3VlOiBDT01QUkVTUy02MjguIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIFNvbWUgaW5wdXQgc3RyZWFtcyBhcmUgbm90IGNsb3NlZCBpbiBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuaGFybW9ueS5wYWNrMjAwLlBhY2tpbmdVdGlscy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogUGFjazIwMCBjYXVzZXMgYSAnYXJjaGl2ZS4zRScgZXJyb3IgaWYgaXQ/cyBub3QgaW4gdGhlIHN5c3RlbSBjbGFzcyBsb2FkZXIuCiAgSXNzdWU6IENPTVBSRVNTLTYyNy4gVGhhbmtzIHRvIGFuYXRhd2ExMiwgR2FyeSBHcmVnb3J5LiAKCkNoYW5nZXMKLS0tLS0tLQoqIEJ1bXAgYWN0aW9ucy9jYWNoZSBmcm9tIDIuMS42IHRvIDMuMC4xMCAjMjMwLCAjMjU3LCAjMzA1LCAjMzIwLiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LiAKKiBCdW1wIGFjdGlvbnMvY2hlY2tvdXQgZnJvbSAyLjMuNCB0byAzLjEuMCAjMjI2LCAjMjI3LCAjMjUxLCAjMzAwLCAjMzIxLiBUaGFua3MgdG8gRGVwZW5kYWJvdCwgR2FyeSBHcmVnb3J5LiAKKiBCdW1wIGFjdGlvbnMvc2V0dXAtamF2YSBmcm9tIDIgdG8gMy41LjEgIzI3OC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqIEJ1bXAgZ2l0aHViL2NvZGVxbC1hY3Rpb24gZnJvbSAxIHRvIDIgIzI4Ny4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqIEJ1bXAgbW9ja2l0by1jb3JlIGZyb20gMy4xMS4xIHRvIDQuNi4xICMyMDksICMyMjQsICMyMzEsICMyMzUsICMyNDMsICMyNTMsICMyODYsICMyOTQuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIG9yZy5hcGFjaGUuZmVsaXguZnJhbWV3b3JrIGZyb20gNy4wLjAgdG8gNy4wLjEgIzIwOC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqIEJ1bXAgbWVtb3J5ZmlsZXN5c3RlbSBmcm9tIDIuMS4wIHRvIDIuMy4wICMyMTIsICMyMzcuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIHpzdGQtam5pIGZyb20gMS41LjAtMiB0byAxLjUuMi01ICMyMTUsICMyMzMsICMyMzgsICMyNDAsICMyNTAsICMyOTEsICMzMjYuIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuIAoqIEJ1bXAgUGFjazIwMCBwYWNrYWdlcyBmcm9tIEFTTSAzLjIgdG8gOS4yICMyMTYuIAogIEJyZWFrcyBiaW5hcnkgY29tcGF0aWJpbGl0eSBpbiB0aGUgaW50ZXJuYWxzIG9mIHRoZSBwYWNrMjAwIGltcGxlbWVudGF0aW9uOgogIC0gb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmhhcm1vbnkucGFjazIwMC5TZWdtZW50CiAgLSBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuaGFybW9ueS5wYWNrMjAwLlNlZ21lbnRNZXRob2RWaXNpdG9yCiAgLSBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuaGFybW9ueS5wYWNrMjAwLlNlZ21lbnRBbm5vdGF0aW9uVmlzaXRvcgogIC0gb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmhhcm1vbnkucGFjazIwMC5TZWdtZW50RmllbGRWaXNpdG9yCiAgSXNzdWU6IENPTVBSRVNTLTU4Mi4gVGhhbmtzIHRvIEFsZXggTGFuZGF1LCBTdGVwaGFuLCBHYXJ5IEdyZWdvcnkuIAoqIEJ1bXAgYXNtIGZyb20gOS4yIHRvIDkuNCAjMjc5LCAjMzIyLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCiogQnVtcCBtYXZlbi1qYXZhZG9jLXBsdWdpbiBmcm9tIDMuMy4wIHRvIDMuNC4xICMyMjEsICMyNDksICMyODgsICMzMDguIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIG1hdmVuLXBtZC1wbHVnaW4gZnJvbSAzLjE0LjAgdG8gMy4xOS4wICMyOTYsICMzMDksICMzMTEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIERlcGVuZGFib3QuIAoqIEJ1bXAgcG1kIGZyb20gNi40NC4wIHRvIDYuNTAuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCiogQnVtcCBjb21tb25zLmphcGljbXAudmVyc2lvbiBmcm9tIDAuMTUuMyB0byAwLjE2LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIEJ1bXAgbWF2ZW4tYnVuZGxlLXBsdWdpbiBmcm9tIDUuMS4yIHRvIDUuMS44ICMyMzQsICMyMzksICMyOTAsICMyOTIsICMzMDEsICMzMDQuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIG9yZy5hcGFjaGUuZmVsaXguZnJhbWV3b3JrIGZyb20gNy4wLjEgdG8gNy4wLjUgIzIzMiwgIzI5NS4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoqIEJ1bXAgc2xmNGotYXBpIGZyb20gMS43LjMwIHRvIDIuMC4zICMyMTMsICMyNDEsICMyNTgsICMzMTAsICMzMTQsICMzMTUsICMzMTguIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIGNvbW1vbnMtcGFyZW50IGZyb20gNTIgdG8gNTQgIzI4MC4gVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4gCiogQnVtcCBjb21tb25zLmphY29jby52ZXJzaW9uIGZyb20gMC44LjcgdG8gMC44LjguIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoqIEJ1bXAganVuaXQudmVyc2lvbiBmcm9tIDUuOC4yIHRvIDUuOS4xICMzMDIsICMzMTcuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIG1vY2tpdG8udmVyc2lvbiBmcm9tIDQuNi4xIHRvIDQuOC4wICMzMDcsICMzMTIuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKKiBCdW1wIG1hdmVuLXN1cmVmaXJlLXBsdWdpbiBmcm9tIDMuMC4wLU02IHRvIDMuMC4wLU03LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcywgaW5jbHVkaW5nIGluc3RydWN0aW9ucwpvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsCnNlZSB0aGUgQXBhY2hlIENvbW1vbnMgQ29tcHJlc3Mgd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2NvbXByZXNzLwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4yMQotLS0tLS0tLS0tLS0KCkNvbXByZXNzIDEuMjEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gcmVxdWlyZSBKYXZhIDggdG8gYnVpbGQgYW5kIHJ1bi4KClNldmVuWkZpbGVPcHRpb25zIGhhcyBhIG5ldyBzZXR0aW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZApleHBsaWNpdGx5IGlmIFNldmVuWkZpbGUgc2hvdWxkIHRyeSB0byByZWNvdmVyIGJyb2tlbiBhcmNoaXZlcyAtIGEKZmVhdHVyZSBpbnRyb2R1Y2VkIHdpdGggQ29tbW9ucyBDb21wcmVzcyAxLjE5LiBUaGlzIGlzIGEgYnJlYWtpbmcKY2hhbmdlIGlmIHlvdSByZWxpZWQgb24gdGhlIHJlY292ZXJ5IGF0dGVtcHQuIFRoZSBjaGFuZ2Ugd2FzIG1hZGUgdG8KZGV0ZWN0IGJyb2tlbiBhcmNoaXZlcyBzb29uZXIsIGFuZCB0byBtaXRpZ2F0ZSB0aGUgT09NIGV4cGxvaXQuCgpTZXZlcmFsIGZvcm1hdHMgbm93IHRocm93IElPRXhjZXB0aW9ucyB3aGVuIHJlYWRpbmcgYnJva2VuIGFyY2hpdmVzIG9yCnN0cmVhbXMgdGhhdCB3b3VsZCBoYXZlIGNhdXNlZCBhcmJpdHJhcnkgUnVudGltZUV4Y2VwdGlvbnMgaW4gZWFybGllcgp2ZXJzaW9ucyBvZiBDb21wcmVzcy4KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBBZGQgd3JpdGVQcmVhbWJsZSB0byBaaXBBcmNoaXZlSW5wdXRTdHJlYW0uIFRoaXMgbWV0aG9kIGNvdWxkCiAgd3JpdGUgcmF3IGRhdGEgdG8gemlwIGFyY2hpdmUgYmVmb3JlIGFueSBlbnRyeSB3YXMgd3JpdHRlbiB0bwogIHRoZSB6aXAgYXJjaGl2ZS4KICBGb3IgbW9zdCBvZiB0aGUgdGltZSwgdGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBzZWxmLWV4dHJhY3RpbmcKICB6aXAuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTI3LgogIElzc3VlOiBDT01QUkVTUy01NTAuCiAgVGhhbmtzIHRvIFNjb3R0IEZyZWRlcmljay4KKiBBZGRlZCBzdXBwb3J0IGZvciByYW5kb20gYWNjZXNzIHRvIHRoZSBUQVIgcGFja2FnZXMuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTEzLgogIElzc3VlOiBDT01QUkVTUy01NDAuCiAgVGhhbmtzIHRvIFJvYmluIFNjaGltcGYuCiogQWRkZWQgc3VwcG9ydCBmb3IgQnVmZmVyUG9vbCBpbiBac3RkQ29tcHJlc3NvcklucHV0U3RyZWFtLgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzE2NS4KICBJc3N1ZTogQ09NUFJFU1MtNTY1LgogIFRoYW5rcyB0byBNaWNoYWVsIEwgSGV1ZXIuCiogQ29tbW9ucyBDb21wcmVzcyBjYW5ub3QgYmUgYnVpbHQgd2l0aCBKREsxNCBkdWUgdG8gUGFjazIwMCByZW1vdmFsLgogIEFkZCBQYWNrMjAwIGltcGxlbWVudGF0aW9uIGZyb20gQXBhY2hlIEhhcm1vbnkuCiAgSXNzdWU6IENPTVBSRVNTLTUwNy4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBBcGFjaGUgSGFybW9ueS4KKiBBZGQgYSBuZXcgQWx3YXlzV2l0aENvbXBhdGliaWxpdHkgaW4gWmlwNjRNb2RlLCB0aGlzIGlzIGEKICBjb21wcm9taXNlIGZvciBzb21lIGxpYnJhcmllcyBpbmNsdWRpbmcgN3ogYW5kIEV4cGFuZC1BcmNoaXZlCiAgUG93ZXJzaGVsbCB1dGlsaXR5KGFuZCBsaWtlbHkgRXhjZWwpLgoKICBBbmQgd2Ugd2lsbCBlbmNvZGUgYm90aCB0aGUgTEZIIG9mZnNldCBhbmQgRGlzayBOdW1iZXIgU3RhcnQKICBpbiB0aGUgWklQNjQgRXh0ZW5kZWQgSW5mb3JtYXRpb24gRXh0cmEgRmllbGQgLSBldmVuIGlmIG9ubHkKICB0aGUgZGlzayBudW1iZXIgbmVlZHMgdG8gYmUgZW5jb2RlZC4KCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTY5LgogIElzc3VlOiBDT01QUkVTUy01NjUuCiAgVGhhbmtzIHRvIEV2Z2VuaWkgQm92eWtpbi4KKiBnemlwIGRlZmxhdGUgYnVmZmVyIHNpemUgaXMgbm93IGNvbmZpZ3VyYWJsZS4KICBJc3N1ZTogQ09NUFJFU1MtNTY2LgogIFRoYW5rcyB0byBCcmV0dCBPa2tlbi4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqIEZpeCBidWdzIGluIHJhbmRvbSBhY2Nlc3Mgb2YgN3ouIFByb2JsZW1zIG1heSBoYXBwZW4KICBpbiBhIG1peHR1cmUgdXNlIG9mIHJhbmRvbSBhY2Nlc3MgYW5kIHNlcXVlbnRpYWwgYWNjZXNzCiAgb2YgN3ouCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjOTUuCiAgSXNzdWU6IENPTVBSRVNTLTUwNS4KKiBGaXggYnVncyBpbiByYW5kb20gYWNjZXNzIG9mIDd6LiBFeGNlcHRpb25zIGFyZSB0aHJvd24KICB3aGVuIHJlYWRpbmcgdGhlIGZpcnN0IGVudHJ5IG11bHRpcGxlIHRpbWVzIGJ5IHJhbmRvbQogIGFjY2Vzcy4KICBJc3N1ZTogQ09NUFJFU1MtNTEwLgoqIEFkZCAnLycgdG8gZGlyZWN0b3JpZXMgd2l0aCBsb25nIG5hbWUgaW4gdGFyLiBUaGlzIGlzIHRvCiAgcmVzb2x2ZSB0aGUgYW1iaWd1b3VzIGJlaGF2aW9yIG9mIHRoZSBUYXJBcmNoaXZlRW50cnkuZ2V0TmFtZSgpCiAgbWV0aG9kIGJldHdlZW4gZGlyZWN0b3J5IHdpdGggc2hvcnQgbmFtZSBhbmQgbG9uZyBuYW1lLgogIElzc3VlOiBDT01QUkVTUy01MDkuCiAgVGhhbmtzIHRvIFBldHIgVmFzYWsuCiogUmVtb3ZlZCB0aGUgUG93ZXJNb2NrIGRlcGVuZGVuY3kuCiAgSXNzdWU6IENPTVBSRVNTLTUyMC4KICBUaGFua3MgdG8gUm9iaW4gU2NoaW1wZi4KKiBBZGRlZCBpbXByb3ZlZCBjaGVja3MgdG8gZGV0ZWN0IGNvcnJ1cHRlZCBiemlwMiBzdHJlYW1zIGFuZAogIHRocm93IHRoZSBleHBlY3RlZCBJT0V4Y2VwdGlvbiByYXRoZXIgdGhhbiBvYnNjdXJlCiAgUnVudGltZUV4Y2VwdGlvbnMuCiAgU2VlIGFsc28gQ09NUFJFU1MtNTE5LgogIElzc3VlOiBDT01QUkVTUy01MTYuCiogSW1wcm92ZWQgcGFyc2luZyBvZiBYNTQ1NV9FeHRlbmRlZFRpbWVzdGFtcCBaSVAgZXh0cmEgZmllbGQuCiAgSXNzdWU6IENPTVBSRVNTLTUxNy4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gYW5kIFppcEZpbGUgd2lsbCBub3cgdGhyb3cgYW4KICBJT0V4Y2VwdGlvbiByYXRoZXIgdGhhbiBhIFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHppcDY0IGV4dHJhCiAgZmllbGQgb2YgYW4gZW50cnkgY291bGQgbm90IGJlIHBhcnNlZC4KICBJc3N1ZTogQ09NUFJFU1MtNTE4LgoqIEltcHJvdmVkIGRldGVjdGlvbiBvZiBjb3JydXB0IFpJUCBhcmNoaXZlcyBpbiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0uCiAgSXNzdWU6IENPTVBSRVNTLTUyMy4KKiBBZGRlZCBpbXByb3ZlZCBjaGVja3MgdG8gZGV0ZWN0IGNvcnJ1cHRlZCBkZWZsYXRlNjQgc3RyZWFtcyBhbmQKICB0aHJvdyB0aGUgZXhwZWN0ZWQgSU9FeGNlcHRpb24gcmF0aGVyIHRoYW4gb2JzY3VyZQogIFJ1bnRpbWVFeGNlcHRpb25zLgogIElzc3VlczogQ09NUFJFU1MtNTIxLCBDT01QUkVTUy01MjIsIENPTVBSRVNTLTUyNSwgQ09NUFJFU1MtNTI2LCBhbmQgQ09NUFJFU1MtNTI3LgoqIEFkZCB0aGUgYXJjaGl2ZSBuYW1lIGluIHRoZSBleGNlcHRpb24gaW4gdGhlIGNvbnN0cnVjdG9yIG9mCiAgWmlwRmlsZSB0byBtYWtlIGl0IGEgbW9yZSBzcGVjaWZpYyBleGNlcHRpb24uCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTAyLgogIElzc3VlOiBDT01QUkVTUy01MTUuCiAgVGhhbmtzIHRvIGlhbi1sYXZhbGxlZS4KKiBUaHJvdyBJT0V4Y2VwdGlvbiB3aGVuIGl0IGVuY291bnRlcnMgYSBub24tbnVtYmVyIHdoaWxlIHBhcnNpbmcgcGF4CiAgaGVhZGVyLgogIElzc3VlOiBDT01QUkVTUy01MzAuCiogVGhyb3cgSU9FeGNlcHRpb24gd2hlbiBhIHRhciBhcmNoaXZlIGNvbnRhaW5zIGEgUEFYIGhlYWRlcgogIHdpdGhvdXQgYW55IG5vcm1hbCBlbnRyeSBmb2xsb3dpbmcgaXQuCiAgSXNzdWU6IENPTVBSRVNTLTUzMS4KKiBBZGRlZCBpbXByb3ZlZCBjaGVja3MgdG8gZGV0ZWN0IGNvcnJ1cHRlZCBJTVBMT0RFRCBzdHJlYW1zIGFuZAogIHRocm93IHRoZSBleHBlY3RlZCBJT0V4Y2VwdGlvbiByYXRoZXIgdGhhbiBvYnNjdXJlCiAgUnVudGltZUV4Y2VwdGlvbnMuCiAgSXNzdWU6IENPTVBSRVNTLTUzMi4KKiBUaHJvdyBleHBlY3RlZCBJT0V4Y2VwdGlvbiBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZgogIGl0IGVuY291bnRlcnMgbm9uLW51bWJlcnMgd2hlbiBwYXJzaW5nIHBheCBoZWFkZXJzIGZvciB0YXJiYWxsLgoKICBUaHJvdyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaW5zdGVhZCBvZiBSdW50aW1lRXhjZXB0aW9ucyBpZgogIHRoZSBmaWxlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gMTAwIGJ5dGVzIHdpdGggdGhlIGxvbmdGaWxlTW9kZQogIG9mIExPTkdGSUxFX0VSUk9SLCBhbmQgYWRkcmVzcyB0aGlzIGluIGphdmEgZG9jcy4KCiAgVGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGluc3RlYWQgb2YgUnVudGltZUV4Y2VwdGlvbnMgaWYKICB0aGUgYW55IG9mIHRoZSBudW1lcmljIHZhbHVlcyBvZiBhbiBlbnRyeSBleGNlZWRzIHRoZSBsaW1pdHMKICBvZiBhIHRyYWRpdGlvbmFsIHRhciBoZWFkZXIgd2hpbGUgYmlnTnVtYmVyTW9kZSBpcwogIEJJR05VTUJFUl9FUlJPUiwgYW5kIGFkZHJlc3MgdGhpcyBpbiBqYXZhIGRvY3MuCiAgSXNzdWU6IENPTVBSRVNTLTUyOS4KKiBGaXggZm9yIHRlc3QgZmFpbHMgb24gV2luZG93cy4gVGhlIHRlc3RzIGFyZSBmYWlsaW5nIGJlY2F1c2UgdGhlCiAgZGVmYXVsdCBjaGFyc2V0IGlzIG5vdCBVVEYtOC4KICBJc3N1ZTogQ09NUFJFU1MtNTQzLgogIFRoYW5rcyB0byB3dWxmMjMzMy4KKiBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gY2FuIG5vdCBkZXRlY3QgYSB0cnVuY2F0ZWQgdGFyIGluIHNraXAoKQogIGFuZCBza2lwUmVjb3JkUGFkZGluZygpLgogIElzc3VlOiBDT01QUkVTUy01NDQuCiAgVGhhbmtzIHRvIEFkaXR5YSBQcmFzYWQuCiogTWFrZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gU2V2ZW5aRmlsZS5yZWFkRmlsZXNJbmZvIGEgbGF6eQogIGFsbG9jYXRpb24gdG8gYXZvaWQgT09NIHdoZW4gZGVhbGluZyBzb21lIGdpYW50IDd6IGFyY2hpdmVzLgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzEyMC4KCiAgQWxzbyBhZGRlZCBzYW5pdHkgY2hlY2tzIGJlZm9yZSBldmVuIHRyeWluZyB0byBwYXJzZSBhbgogIGFyY2hpdmUgYW5kIG1hZGUgU2V2ZW5aRmlsZU9wdGlvbnMnIG1heE1lbW9yeVNpemVJbktiIGFwcGx5IHRvCiAgdGhlIHN0b3JlZCBtZXRhZGF0YSBmb3IgYW4gYXJjaGl2ZS4KCiAgQW5kIGZ1cnRoZXIgYWRkZWQgYW4gb3B0aW9uIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBvcmRlcgogIHRvIG1ha2UgU2V2ZW5aRmlsZSB0cnkgdG8gcmVjb3ZlciBhIGJyb2tlbiBhcmNoaXZlLiBUaGlzIGlzIGEKICBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZS4KICBJc3N1ZTogQ09NUFJFU1MtNTQyLgogIFRoYW5rcyB0byB0aGVvYmlzcHJvamVjdC4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGNvcnJwdXRlZAogIHppcDY0IGV4dHJhIGZpZWxkIGlzIG1ldC4KICBJc3N1ZTogQ09NUFJFU1MtNTQ2LgogIFRoYW5rcyB0byBNYWtzaW0gWnVldi4KKiBBZGQgYSBuZXcgbWF2ZW4gcHJvZmlsZSBpbiBwb20ueG1sIGZvciBKREsxNCsgdG8gaWdub3JlIHRoZQogIGZhaWxpbmcgdGVzdHMgYWJvdXQgUGFjazIwMC4KCiAgVGhpcyBoYXMgbGF0ZXIgYmVlbiBzdXBlcnNlZWRlZCBieSBhZGRpbmcgdGhlIEFwYWNoZSBIYXJtb255CiAgY2xhc3NlcyBmb3IgUGFjazIwMCBzdXBwb3J0LgoqIFRocm93IGFuIElPRXhjZXB0aW9uIHdoZW4gcmVhZGluZyB0aGUgemlwIGV4dHJhIGZpZWxkIGlmIHRoZQogIGxlbmd0aCBpcyB0b28gc2hvcnQuCiAgSXNzdWU6IENPTVBSRVNTLTU0OC4KICBUaGFua3MgdG8gTWFrc2ltIFp1ZXYuCiogVGhyb3cgYW4gZGVjbGFyZWQgSU9FeGNlcHRpb24gaWYgYSBudWxsIGVudHJ5IGlzIG1ldCB3aGVuCiAgcmVhZGluZyBhIGdsb2JhbCBwYXggaGVhZGVyIGluc3RlYWQgb2YgYSBydW50aW1lIE5QRS4KICBJc3N1ZTogQ09NUFJFU1MtNTU0LgogIFRoYW5rcyB0byBNYWtzaW0gWnVldi4KKiBaSVAgZXh0cmFjdGlvbiBjb3VsZCBsZWFkIHRvIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnMKICByYXRoZXIgdGhhbiB0aGUgZXhwZWN0ZWQgSU9FeGNlcHRpb24uCiAgSXNzdWU6IENPTVBSRVNTLTU0NS4KICBUaGFua3MgdG8gTWFrc2ltIFp1ZXYuCiogQWRkIGFzc2VydHMgZm9yIEFycmF5cy5jb3B5T2YgaW4gWDAwMTdfU3Ryb25nRW5jcnlwdGlvbkhlYWRlci4KICBJc3N1ZTogQ09NUFJFU1MtNTQ3LgogIFRoYW5rcyB0byBNYWtzaW0gWnVldi4KKiBGaXggZm9yIHRoZSBDRkggc2lnbmF0dXJlIGRldGVjdCBpbiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0uCiAgVGhlIHByb2JsZW0gY291bGQgYmUgcmVwcm9kdWNlZCBieSBhIHppcCBhcmNoaXZlIHdpdGggRGF0YQogIERlc2NyaXB0b3IgYW5kIFNUT1JFRCwgYW5kIHdpdGhvdXQgdGhlIERhdGEgRGVzY3JpcHRvcgogIHNpZ25hdHVyZS4KKiBUaGUgbGVuZ3RoIHZhbGlkYXRpb24gaW4gVGFyQXJjaGl2ZUlucHV0U3RyZWFtLnBhcnNlUGF4SGVhZGVycwogIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBoZWFkZXJzIHdpdGggbGVuZ3RoIHNtYWxsZXIgdGhhbiAxCiAgYW5kIGlnbm9yZSB0aGVzZSBoZWFkZXJzLgogIElzc3VlOiBDT01QUkVTUy01NTMuCiAgVGhhbmtzIHRvIE1ha3NpbSBadWV2LgoqIEZpeCBhY2NpZGVudGFsbHkgYWRkZWQgJy8nIHRvIGZpbGUgbmFtZXMuCiAgVGhpcyBwcm9ibGVtIGlzIGNhdXNlZCBieSB0aGUgaW5jb21wbGV0ZSBmaXggb2YgQ09NUFJFU1MtNTA5LgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzE1MS4KICBJc3N1ZTogQ09NUFJFU1MtNTU4LgogIFRoYW5rcyB0byBSb2JpbiBTY2hpbXBmLgoqIEFzIHNwYXJzZSBlbnRyaWVzIGNhbiBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIG5vdywKICBUYXJBcmNoaXZlSW5wdXRTdHJlYW0uY2FuUmVhZEVudHJ5RGF0YSBzaG91bGQgcmV0dXJuCiAgdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBzcGFyc2UgZW50cnkuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTUzLgogIElzc3VlOiBDT01QUkVTUy01NjAuCiAgVGhhbmtzIHRvIFJvYmluIFNjaGltcGYuCiogU3BhcnNlRmlsZXNUZXN0I3Rlc3RFeHRyYWN0UGF4R05VIHNob3VsZCBiZSBza2lwcGVkCiAgaWYgdGhlIHZlcnNpb24gb2YgR05VIHRhciBiaW5hcnkgaXMgMS4yOC4KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICMxNTIuCiAgSXNzdWU6IENPTVBSRVNTLTU1OS4KICBUaGFua3MgdG8gUm9iaW4gU2NoaW1wZi4KKiBSZW1vdmVkIGFuIGVtcHR5IGxvb3AgdGhhdCB3YXMganVzdCB3YXJtaW5nIHRoZSBwbGFuZXQgZm9yCiAgY2VydGFpbiBaSVAgYXJjaGl2ZXMuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTcyLgogIFRoYW5rcyB0byBGYWJpYW4gTWV1bWVydHpoZWltLgoqIE1hZGUgc29tZSBvZiB0aGUgc3RyZWFtIGNsYXNzZXMgdXNlZCBpbnRlcm5hbGx5IHRocm93CiAgSU9FeGNlcHRpb25zIG9uIGlsbGVnYWwgYXJndW1lbnRzIHJhdGhlciB0aGFuCiAgUnVudGltZUV4Y2VwdGlvbnMgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0aGF0IGNvcnJ1cHQgYXJjaGl2ZXMKICBjYXVzZSBleHBlY3RlZCBjaGVja2VkIGV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gUnVudGltRXhjZXB0aW9uCiAgZm9yIHZhcmlvdXMgZm9ybWF0cy4KCiAgRml4ZXMgYSBzcGVjaWZpYyBjYXNlIGZvciBaSVAgYnV0IGFmZmVjdHMgb3RoZXIgZm9ybWF0cyBhcwogIHdlbGwuCiAgSXNzdWU6IENPTVBSRVNTLTU2Ny4KKiBTaW1wbGlmeSBBc3NlcnRpb25zICMyMDUuCiAgVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogQ2hlY2tlZCB0aGUgc2l6ZXMgcmVhZCBmb3IgYXJjaGl2ZSBlbnRyaWVzIGFuZCByZWplY3QgYXJjaGl2ZXMKICBhcyBicm9rZW4gd2l0aCBuZWdhdGl2ZSBlbnRyeSBzaXplcy4KCiAgRml4ZXMgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgbmV3IFRhckZpbGUgY2xhc3MgYnV0IGFmZmVjdHMKICBzZXZlcmFsIGZvcm1hdHMuCiAgSXNzdWU6IENPTVBSRVNTLTU2OS4KKiBPU0dpIGRldGVjdGlvbiB3YXMgYnJva2VuIGFuZCBzbyB3ZSBhbHdheXMgY2FjaGVkIHdoZXRoZXIKICBYWi9icm90bGkvenN0ZC9MWk1BIGhhdmUgYmVlbiBhdmFpbGFibGUgZXZlbiBpbiBPU0dpCiAgZW52aXJvbm1lbnRzLgogIElzc3VlOiBDT01QUkVTUy01NTIuCiogU2V2ZW5aRmlsZS5nZXRFbnRyaWVzIG5vdyByZXR1cm4gYSBjb3B5IG9mIGVudHJpZXMuCiAgSXNzdWU6IENPTVBSRVNTLTU3MS4KKiBIYW5kbGluZyBvZiBzcGFyc2UgdGFyIGVudHJpZXMgaGFzIGJlZW4gaGFyZGVuZWQgdG8gZW5zdXJlIGJhZAogIGlucHV0cyBjYXVzZSBleHBlY3RlZCBJT0V4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gUnVudGltZUV4Y2VwdGlvbnMuCiAgSXNzdWU6IENPTVBSRVNTLTU3NS4KKiBUaGUgcGFyc2VyIGZvciBHTlUgc3BhcnNlIHRhciBoZWFkZXJzIGNvdWxkIHRocm93IGEKICBOdWxsUG9pbnRlckV4Y3BldGlvbiByYXRoZXIgdGhhbiBhbiBJT0V4Y2VwdGlvbiBpZiB0aGUgYXJjaGl2ZQogIGVuZGVkIHdoaWxlIG1vcmUgc3BhcnNlIGhlYWRlcnMgd2VyZSBleHBlY3RlZC4KCkNoYW5nZXMKLS0tLS0tLQoqIE1hZGUgc3VyZSBac3RkQ29tcHJlc3Nvck91dHB1dFN0cmVhbSBubyBsb25nZXIgdXNlZAogIGRlcHJlY2F0ZWQgWnN0T3V0cHV0U3RyZWFtIGNvbnN0cnVjdG9ycy4KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICM5NC4KICBUaGFua3MgdG8gUGV0ZXIgQWxmcmVkIExlZS4KKiBNYWtlIGNvbXByZXNzaW9uIGxldmVsIG9mIFBhcmFsbGVsU2NhdHRlclppcENyZWF0b3IKICBjb25maWd1cmFibGUgdmlhIGEgbmV3IGNvbnN0cnVjdG9yLgogIElzc3VlOiBDT01QUkVTUy01MDQuCiogTWFkZSBhbiBpbm5lciBjbGFzcyBzdGF0aWMKICBHaXRodWIgUHVsbCBSZXF1ZXN0ICMxMDcuCiAgSXNzdWU6IENPTVBSRVNTLTUzNi4KICBUaGFua3MgdG8gSmluIFh1LgoqIGFkZGVkIGFuIGVhcmx5IGV4aXQgdG8gYSBsb29wIGluIEJaaXAyQ29tcHJlc3Nvck91dHB1dFN0cmVhbQogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzEwNi4KICBJc3N1ZTogQ09NUFJFU1MtNTM1LgogIFRoYW5rcyB0byBKaW4gWHUuCiogVXBkYXRlIHRoZSBjbGFzcyBvZiB2YXJpYWJsZSBmaWxlIGluIFRhckFyY2hpdmVFbnRyeSBmcm9tCiAgamF2YS5pby5GaWxlIHRvIGphdmEubmlvLmZpbGUuUGF0aC4gQ29ycmVzcG9uZGluZyBjb25zdHJ1Y3RvcnMKICBhbmQgbWV0aG9kcyBhcmUgYWxzbyBtb2RpZmllZC9hZGRlZC4KCiAgTk9URTogVGhlIHVzZXJOYW1lLCBncm91cE5hbWUsIHVzZXJJRCBhbmQgZ3JvdXBJRCB3aWxsIGFsc28gYmUKICBzZXQgaWYgdGhleSBhcmUgYXZhaWxhYmxlLiBUaGUgdXNlck5hbWUgYW5kIGdyb3VwTmFtZSB3YXMgbm90CiAgc2V0IHByZXZpb3VzbHksIGFuZCB0aGUgcHJldmlvdXMgdmFsdWUgb2YgVXNlcklEOkdyb3VwSUQgd2FzCiAgMDowIGJ5IGRlZmF1bHQuCiAgUGxlYXNlIG5vdGUgdGhpcyBtYXkgY2F1c2UgYSByZXByb2R1Y2liaWxpdHkgcHJvYmxlbS4KCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjOTcuCiAgSXNzdWU6IENPTVBSRVNTLTQwNC4KICBUaGFua3MgdG8gdGhlb2Jpc3Byb2plY3QuCiogUmV1c2UgdGhlIHJlY29yZCBidWZmZXIgaW4gVGFyQXJjaGl2ZUlucHV0U3RyZWFtLgogIElzc3VlOiBDT01QUkVTUy01MzkuCiAgVGhhbmtzIHRvIFJvYmluIFNjaGltcGYuCiogQWRkIFNldmVuWk91dHB1dEZpbGUud3JpdGUoSW5wdXRTdHJlYW0pLgogIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIFNldmVuWk91dHB1dEZpbGUud3JpdGUoUGF0aCwgT3Blbk9wdGlvbi4uLikuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgU2V2ZW5aT3V0cHV0RmlsZS5jcmVhdGVBcmNoaXZlRW50cnkoUGF0aCwgU3RyaW5nLCBMaW5rT3B0aW9uLi4uKS4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBBckFyY2hpdmVPdXRwdXRTdHJlYW0uY3JlYXRlQXJjaGl2ZUVudHJ5KFBhdGgsIFN0cmluZywgTGlua09wdGlvbi4uLikuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgQXJBcmNoaXZlRW50cnkoUGF0aCwgU3RyaW5nLCBMaW5rT3B0aW9uLi4uKS4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBjdG9yIENwaW9BcmNoaXZlRW50cnkoUGF0aCwgU3RyaW5nLCBMaW5rT3B0aW9uLi4uKS4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBjdG9yIENwaW9BcmNoaXZlRW50cnkoc2hvcnQsIFBhdGgsIFN0cmluZywgTGlua09wdGlvbi4uLikuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgQ3Bpb0FyY2hpdmVFbnRyeS5zZXRUaW1lKEZpbGVUaW1lKS4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEFkZCBUYXJBcmNoaXZlT3V0cHV0U3RyZWFtLmNyZWF0ZUFyY2hpdmVFbnRyeShQYXRoLCBTdHJpbmcsIExpbmtPcHRpb24uLi4pLgogIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQWRkIGN0b3IgVGFyQXJjaGl2ZUVudHJ5KFBhdGgsIFN0cmluZywgTGlua09wdGlvbi4uLikuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgSU9VdGlscy5FTVBUWV9MSU5LX09QVElPTlMuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBBZGQgUGF0aCBzdXBwb3J0IHRvIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0gIzEyMy4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIFNvbWUgbWlub3IgaW1wcm92ZW1lbnRzLgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzE1Ny4KICBJc3N1ZTogQ09NUFJFU1MtNTYxLgogIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgoqIFVwZGF0ZSBmcm9tIEphdmEgNyB0byA4LgoqIFVwZGF0ZSBHaXRIdWIgYWN0aW9ucy9jaGVja291dCBmcm9tIHYxIHRvIHYyLjMuNCwgIzExNCwgIzEyNCwgIzEzOSwgIzE1MC4KICBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiBVcGRhdGUgYWN0aW9ucy9zZXR1cC1qYXZhIGZyb20gdjEuNC4wIHRvIHYyLCAjMTI1LCAjMTMzLCAjMTQxLgogIFRoYW5rcyB0byBEZXBlbmRhYm90LCBHYXJ5IEdyZWdvcnkuCiogVXBkYXRlIGNvbS5naXRodWIubHViZW46enN0ZC1qbmkgZnJvbSAxLjQuNC03IHRvIDEuNS4wLTIsICMxMTgsICMxNTksICMxNzMsICMxNzQsICMyMDMuCiAgVGhhbmtzIHRvIERlcGVuZGFib3QsIEdhcnkgR3JlZ29yeS4KKiBVcGRhdGUgdGVzdHMgc2xmNGotYXBpIGZyb20gMS43LjI2IHRvIDEuNy4zMCAjMTE3LgogIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqIFVwZGF0ZSBtYXZlbi1wbWQtcGx1Z2luIGZyb20gMy4xMi4wIHRvIDMuMTQuMCwgIzExNSwgIzE1NC4KICBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiBVcGRhdGUgbWF2ZW4tYnVuZGxlLXBsdWdpbiBmcm9tIDMuNS4xIHRvIDUuMS4yICMxMTYsICMxODAuCiAgVGhhbmtzIHRvIERlcGVuZGFib3QuCiogQnVtcCBtZW1vcnlmaWxlc3lzdGVtIGZyb20gMS4zLjAgdG8gMi4xLjAgIzEzMS4KICBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiBCdW1wIGFjdGlvbnMvY2FjaGUgZnJvbSB2MiB0byB2Mi4xLjYsICMxNjQsICMyMDAuCiAgVGhhbmtzIHRvIERlcGVuZGFib3QuCiogQnVtcCBqdW5pdCBmcm9tIDQuMTMgdG8gNC4xMy4yLCAjMTQzLCAjMTY3LgogIFRoYW5rcyB0byBEZXBlbmRhYm90LgoqIEJ1bXAgbW9ja2l0by1jb3JlIGZyb20gMS4xMC4xOSB0byAzLjExLjEsICMxNjEsICMxNzAsICMyMDQuCiAgVGhhbmtzIHRvIERlcGVuZGFib3QuCiogQnVtcCBjb21tb25zLmphY29jby52ZXJzaW9uIGZyb20gMC44LjUgdG8gMC44LjcgKEphdmEgMTYgYnVpbGRzKS4KICBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgoqIEJ1bXAgb3JnLmFwYWNoZS5mZWxpeDpvcmcuYXBhY2hlLmZlbGl4LmZyYW1ld29yayBmcm9tIDYuMC4zIHRvIDcuMC4wIChKYXZhIDE2IGJ1aWxkcykuCiAgVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KKiBCdW1wIGNvbW1vbnMuamFwaWNtcC52ZXJzaW9uIGZyb20gMC4xNC4zIHRvIDAuMTUuMyAoSmF2YSAxNiBidWlsZHMpLgogIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogQnVtcCBjb21tb25zLmphdmFkb2MudmVyc2lvbiBmcm9tIDMuMi4wIHRvIDMuMy4wLgogIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCiogVXBkYXRlIGNvbS5naXRodWIubHViZW46enN0ZC1qbmkgZnJvbSAxLjQuOC03IHRvIDEuNC45LTEgIzE3Ni4KICBUaGFua3MgdG8gRGVwZW5kYWJvdC4KKiBVcGRhdGUgb3JnLnR1a2Fhbmk6eHogZnJvbSAxLjggdG8gMS45CiogU29tZSBtaW5vciBpbXByb3ZlbWVudHMuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTkzLgogIElzc3VlOiBDT01QUkVTUy01NzcuCiAgVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogSmF2YTggaW1wcm92ZW1lbnRzLgogIEdpdGh1YiBQdWxsIFJlcXVlc3QgIzE5NC4KICBJc3N1ZTogQ09NUFJFU1MtNTc4LgogIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLgoqIFJlbW92ZSByZWR1bmRhbnQgbG9jYWwgdmFyaWFibGUuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjMTk1LgogIElzc3VlOiBDT01QUkVTUy01NzkuCiAgVGhhbmtzIHRvIEFydHVybyBCZXJuYWwuCiogUmVtb3ZlIHJlZHVuZGFudCBvcGVyYXRpb24KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICMxOTYuCiAgSXNzdWU6IENPTVBSRVNTLTU4MC4KICBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMjAKLS0tLS0tLS0tLS0tCgpDb21tb25zIENvbXByZXNzIDEuMjAgbGlrZSBhbnkgdmVyc2lvbiBvZiBDb21tb25zIENvbXByZXNzIHNpbmNlIDEuMwpjYW4gbm90IGJlIGJ1aWx0IGZyb20gc291cmNlcyB1c2luZyBKYXZhIDE0IGFzIEphdmEgMTQgcmVtb3ZlcwpzdXBwb3J0IGZvciB0aGUgUGFjazIwMCBmb3JtYXQuIFdlIHdpbGwgYWRkcmVzcyB0aGlzIGlzc3VlIHdpdGggdGhlCm5leHQgcmVsZWFzZS4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqIFNldmVuWkZpbGUgY291bGQgdGhyb3cgTnVsbFBvaW50ZXJFeGNlcHRpb24gcmF0aGVyIHRoYW4KICBJT0V4Y2VwdGlvbiBmb3IgY2VydGFpbiBhcmNoaXZlcy4gSW4gYWRkaXRpb24gaXQgbm93IGhhbmRsZXMKICBjZXJ0YWluIGVtcHR5IGFyY2hpdmVzIG1vcmUgZ3JhY2VmdWxseS4KICBJc3N1ZTogQ09NUFJFU1MtNDkyLgoqIERlZmxhdGU2NENvbXByZXNzb3JJbnB1dFN0cmVhbS5yZWFkIHdvdWxkIHJldHVybiAwIGZvciBzb21lCiAgaW5wdXRzIGluIHZpb2xhdGlvbiBvZiB0aGUgSW5wdXRTdHJlYW0ucmVhZCBjb250cmFjdC4KICBJc3N1ZTogQ09NUFJFU1MtNDkxLgoqIFNlZWthYmxlSW5NZW1vcnlCeXRlQ2hhbm5lbCdzIHRydW5jYXRlIGRpZG4ndCBzZXQgcG9zaXRpb24KICBhY2NvcmRpbmcgdG8gdGhlIHNwZWMgaW4gYW4gZWRnZSBjYXNlLgogIElzc3VlOiBDT01QUkVTUy00OTkuCiogQlppcDJDb21wcmVzc29ySW5wdXRTdHJlYW0gbm93IGluY29ycG9yYXRlcyBhIHNpbWlsYXIgcGF0Y2ggYXMKICB0aGUgb25lIHRoYXQgZml4ZWQgQ1ZFLTIwMTktMTI5MDAgaW4gbGliYnppcDIuCgogIENvbW1vbnMgQ29tcHJlc3MgaGFzIG5vdCBiZWVuIHZ1bG5lcmFibGUgdG8gdGhpcyBDVkUgYXMgaXQKICB3b3VsZCBoYXZlIHJlamVjdGVkIGEgZmlsZSB3aXRoIHRvbyBtYW55IHNlbGVjdG9ycy4gV2l0aCB0aGlzCiAgcGF0Y2ggQ29tbW9ucyBDb21wcmVzcyB3aWxsIGJlIGFibGUgdG8gcmVhZCBjZXJ0YWluIGFyY2hpdmVzCiAgdGhhdCB3b3VsZCBoYXZlIGNhdXNlZCBlcnJvcnMgaW4gQ29tcHJlc3MgMS4xOS4gVGhhbmtzIHRvIEpvc2VwaCBBbGxlbWFuZG91LgoKQ2hhbmdlcwotLS0tLS0tCiogVXBkYXRlIG9wdGlvbmFsIGxpYnJhcnkgY29tLmdpdGh1Yi5sdWJlbjp6c3RkLWpuaSBmcm9tCiAgMS40LjAtMSB0byAxLjQuNC03LgogIElzc3VlOiBDT01QUkVTUy00OTMuCiogVXBkYXRlIHRlc3RzIGZyb20gb3JnLmFwYWNoZS5mZWxpeDpvcmcuYXBhY2hlLmZlbGl4LmZyYW1ld29yawogIDYuMC4yIHRvIDYuMC4zLgoqIFNldmVuWkZpbGUgY2FuIG5vdyByZWNvdmVyIGZyb20gYSBjZXJ0YWluIGNvcnJ1cHRpb24gdGhhdAogIHNlZW1zIHRvIGhhcHBlbiBvY2Nhc2lvbmFsbHkgd2hlbiBzcGxpdCBhcmNoaXZlcyBhcmUgY3JlYXRlZC4KICBJc3N1ZTogQ09NUFJFU1MtNDk3LgogIFRoYW5rcyB0byBTdGVmYW4gU2NobG90dC4KKiBBZGRlZCByYW5kb20gYWNjZXNzIHN1cHBvcnQgdG8gU2V2ZW5aRmlsZS4KICBJc3N1ZTogQ09NUFJFU1MtMzQyLgogIFRoYW5rcyB0byBQZXRlciBBbGZyZWQgTGVlLgoqIEFkZGVkIHN1cHBvcnQgZm9yIHNwbGl0IFpJUCBhcmNoaXZlcy4KICBJc3N1ZTogQ09NUFJFU1MtNDc3LgogIFRoYW5rcyB0byBQZXRlciBBbGZyZWQgTGVlLgoqIEFkZGVkIHN1cHBvcnQgZm9yIHJlYWRpbmcgc3BhcnNlIGVudHJpZXMgdG8gdGhlIFRBUiBwYWNrYWdlLgogIElzc3VlOiBDT01QUkVTUy0xMjQuCiAgVGhhbmtzIHRvIFBldGVyIEFsZnJlZCBMZWUuCiogVXBkYXRlIEpVbml0IGZyb20gNC4xMiB0byA0LjEzLgoKUmVtb3ZlZAotLS0tLS0tCiogUmVtb3ZlZCB0aGUgZXh0cmFjdGlvbiBjb2RlIGZyb20gdGhlIGV4YW1wbGUgQ0xJIGNsYXNzIGluc2lkZQogIG9mIHRoZSBTZXZlblogcGFja2FnZS4gTm90IG9ubHkgaXMgaXQgc3VwZXJzZWVkZWQgYnkgdGhlCiAgZXhhbXBsZXMgcGFja2FnZSwgaXRzIGltcGxlbWVudGF0aW9uIHdhcyB2dWxuZXJhYmxlIHRvIHRoZQogIFppcFNsaXAgYXR0YWNrLgogIElzc3VlOiBDT01QUkVTUy00OTUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjE5Ci0tLS0tLS0tLS0tLQoKWmlwQXJjaGl2ZUlucHV0U3RyZWFtIGFuZCBaaXBGaWxlIHdpbGwgbm8gbG9uZ2VyIHRocm93IGFuIGV4Y2VwdGlvbiBpZgphbiBleHRyYSBmaWVsZCBnZW5lcmFsbHkgdW5kZXJzdG9vZCBieSBDb21tb25zIENvbXByZXNzIGlzIG1hbGZvcm1lZApidXQgcmF0aGVyIHR1cm4gdGhlbSBpbnRvIFVucmVjb2duaXplZEV4dHJhRmllbGQgaW5zdGFuY2VzLiAgWW91IGNhbgppbmZsdWVuY2UgdGhlIHdheSBleHRyYSBmaWVsZHMgYXJlIHBhcnNlZCBpbiBtb3JlIGRldGFpbCBieSB1c2luZyB0aGUKbmV3IGdldEV4dHJhRmllbGRzKEV4dHJhRmllbGRQYXJzaW5nQmVoYXZpb3IpIG1ldGhvZCBvZgpaaXBBcmNoaXZlRW50cnkgbm93LgoKU29tZSBvZiB0aGUgWklQIGV4dHJhIGZpZWxkcyByZWxhdGVkIHRvIHN0cm9uZyBlbmNyeXB0aW9uIHdpbGwgbm93CnRocm93IFppcEV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ucyBpbgpjZXJ0YWluIGNhc2VzIHdoZW4gdXNlZCBkaXJlY3RseS4gVGhlcmUgaXMgbm8gcHJhY3RpY2FsIGRpZmZlcmVuY2UKd2hlbiB0aGV5IGFyZSByZWFkIHZpYSBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gb3IgWmlwRmlsZS4KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBJdCBpcyBub3cgcG9zc2libGUgdG8gc2tpcCBwYXJzaW5nIG9mIGxvY2FsIGZpbGUgaGVhZGVycyB3aGVuCiAgdXNpbmcgWmlwRmlsZSB3aGljaCBtYXkgc3BlZWQgdXAgcmVhZGluZyB0aGUgYXJjaGl2ZSBhdCB0aGUKICBjb3N0IG9mIHBvdGVudGlhbGx5IG1pc3NpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uLiBTZWUgdGhlCiAgamF2YWRvY3Mgb2YgdGhlIFppcEZpbGUgY2xhc3MgZm9yIGRldGFpbHMuCiAgSXNzdWU6IENPTVBSRVNTLTQ2Ni4KKiBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gaGFzIGEgbmV3IGNvbnN0cnVjdG9yLWFyZyBsZW5pZW50IHRoYXQKICBjYW4gYmUgdXNlZCB0byBhY2NlcHQgY2VydGFpbiBicm9rZW4gYXJjaGl2ZXMuCiAgSXNzdWU6IENPTVBSRVNTLTQ2OS4KKiBBcmpBcmNoaXZlRW50cnkgYW5kIFNldmVuWkFyY2hpdmVFbnRyeSBub3cgaW1wbGVtZW50IGhhc2hDb2RlCiAgYW5kIGVxdWFscy4KICBJc3N1ZTogQ09NUFJFU1MtNDc1LgoqIEFkZGVkIGEgTXVsdGlSZWFkT25seVNlZWthYmxlQnl0ZUNoYW5uZWwgY2xhc3MKICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmNhdGVuYXRlIHRoZSBwYXJ0cyBvZiBhIG11bHRpIHZvbHVtZSA3egogIGFyY2hpdmUgc28gdGhhdCBTZXZlblpGaWxlIGNhbiByZWFkIHRoZW0uCiAgSXNzdWU6IENPTVBSRVNTLTIzMS4KICBUaGFua3MgdG8gVGltIFVuZGVyd29vZC4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBjb3VsZCBmb3JnZXQgdGhlIGNvbXByZXNzaW9uIGxldmVsIGhhcwogIGNoYW5nZWQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLgoqIEZpeGVkIGFub3RoZXIgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgaW4KICBQYXJhbGxlbFNjYXR0ZXJaaXBDcmVhdG9yI3dyaXRlVG8uCiAgSXNzdWU6IENPTVBSRVNTLTQ3MC4KKiBBckFyY2hpdmVJbnB1dFN0cmVhbSBjb3VsZCB0aGluayBpdCBoYWQgaGl0IEVPRiBwcmVtYXR1cmVseS4KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICM3NC4KICBUaGFua3MgdG8gQWxleCBCZXJ0cmFtLgoqIFRocm93IElPRXhjZXB0aW9uIHJhdGhlciB0aGFuIFJ1bnRpbWVFeGNlcHRpb25zIGZvciBjZXJ0YWluCiAgbWFsZm9ybWVkIExaNCBvciBTbmFwcHkgaW5wdXRzLgogIElzc3VlOiBDT01QUkVTUy00OTAuCiogWmlwQXJjaGl2ZUlucHV0U3RyZWFtIGZhaWxlZCB0byByZWFkIHN0b3JlZCBlbnRyaWVzIHdpdGggYQogIGRhdGEgZGVzY3JpcHRvciBpZiB0aGUgZGF0YSBkZXNjcmlwdG9yIGRpZG4ndCB1c2UgdGhlCiAgc2lnbmF0dXJlIGludmVudGVkIGJ5IEluZm9aSVAuCiAgSXNzdWU6IENPTVBSRVNTLTQ4Mi4KCkNoYW5nZXMKLS0tLS0tLQoqIFNldmVuWkZpbGUgbm93IHByb3ZpZGVzIGEgd2F5IHRvIGNhcCBtZW1vcnkgY29uc3VtcHRpb24gZm9yCiAgTFpNQSgyKSBjb21wcmVzc2VkIGNvbnRlbnQuCiAgR2l0aHViIFB1bGwgUmVxdWVzdCAjNzYuCiAgSXNzdWU6IENPTVBSRVNTLTQ4MS4KICBUaGFua3MgdG8gUm9iaW4gU2NoaW1wZi4KKiBUaGUgQVJKIHBhY2thZ2UgaGFzIGJlZW4gdXBkYXRlZCB0byBjb250YWluIGNvbnN0YW50cyBmb3IgbW9yZQogIHJlY2VudCBzcGVjaWZpY2F0aW9ucy4KICBJc3N1ZTogQ09NUFJFU1MtNDY0LgogIFRoYW5rcyB0byBSb3N0aXNsYXYgS3Jhc255LgoqIFVwZGF0ZSBvcHRpb25hbCBsaWJyYXJ5IHpzdGQtam5pIGZyb20gMS4zLjMtMyB0byAxLjQuMC0xLgogIElzc3VlOiBDT01QUkVTUy00ODQuCiogUGFyYWxsZWxTY2F0dGVyWmlwQ3JlYXRvciBub3cgd3JpdGVzIHRoZSBlbnRyaWVzIHRvIHRoZQogIGdhdGhlcmVkIG91dHB1dCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGhhdmUgYmVlbiBhZGRlZC4KICBHaXRodWIgUHVsbCBSZXF1ZXN0cyAjNzggYW5kICM3OS4KICBJc3N1ZTogQ09NUFJFU1MtNDg1LgogIFRoYW5rcyB0byBIZXJ2w6kgQm91dGVteSwgVGlib3IgRGlnYW5hLgoqIFRoZSBFeHBhbmRlciBhbmQgQXJjaGl2ZSBleGFtcGxlIGNsYXNzZXMgY2FuIGxlYWsgcmVzb3VyY2VzCiAgdGhleSBoYXZlIHdyYXBwZWQgYXJvdW5kIHBhc3NlZCBpbiBzdHJlYW1zIG9yIGNoYW5uZWxzLiBUaGUKICBtZXRob2RzIGNvbnN1bWluZyBzdHJlYW1zIGFuZCBjaGFubmVscyBoYXZlIGJlZW4gYWRhcHRlZCB0bwogIGdpdmUgdGhlIGNhbGxpbmcgY29kZSBhIGNoYW5jZSB0byBkZWFsIHdpdGggdGhvc2Ugd3JhcHBlcgogIHJlc291cmNlcy4KICBJc3N1ZTogQ09NUFJFU1MtNDg2LgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBhbmQgWmlwRmlsZSBubyBsb25nZXIgYXNzdW1lIENvbW1vbnMKICBDb21wcmVzcyB3b3VsZCB1bmRlcnN0YW5kIGV4dHJhIGZpZWxkcyBiZXR0ZXIgdGhhbiB0aGUgd3JpdGVyCiAgb2YgdGhlIGFyY2hpdmUgYW5kIHNpbGVudGx5IHR1cm4gZXh0cmEgZmllbGRzIHRoYXQgQ29tbW9ucwogIENvbXByZXNzIHNob3VsZCB1bmRlcnN0YW5kIGludG8gVW5yZWNvZ25pemVkRXh0cmFGaWVsZHMgaWYKICBwYXJzaW5nIHNhaWQgZmllbGRzIGZhaWxzLgogIEl0IGlzIG5vdyBwb3NzaWJsZSB0byB0YWtlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBleHRyYSBmaWVsZAogIHBhcnNpbmcgcHJvY2VzcyB3aXRoIGEgbmV3IG92ZXJsb2FkIG9mCiAgWmlwQXJjaGl2ZUVudHJ5I2dldEV4dHJhRmllbGRzLgogIElzc3VlOiBDT01QUkVTUy00NzkuCiogWmlwQXJjaGl2ZUlucHV0U3RyZWFtIHdpbGwgbm93IHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZWFkaW5nIGEKICBzdG9yZWQgZW50cnkgd2l0aCBhIGRhdGEgZGVzY3JpcHRvciBhbmQgdGhlIGRhdGEgZGVzY3JpcHRvcgogIGRvZXNuJ3QgbWF0Y2ggd2hhdCBpdCBoYXMgYWN0dWFsbHkgcmVhZC4KCiAgVGhlIG1vc3QgY29tbW9uIGNhc2UgZm9yIGEgc2l0dWF0aW9uIGxpa2UgdGhpcyBpcyBhIHN0b3JlZCBaSVAKICBhcmNoaXZlIGluc2lkZSBvZiB0aGUgYXJjaGl2ZSBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gY3VycmVudGx5CiAgcmVhZHMuIEluIHN1Y2ggYSBjYXNlIFppcEFyY2hpdmVJbnB1dFN0cmVhbSB3b3VsZCBoYXBwaWx5CiAgZXh0cmFjdCB0aGUgY29udGFpbmVkIGFyY2hpdmUgYW5kIHN0b3Agb25jZSB0aGUgY2VudHJhbAogIGRpcmVjdG9yeSBvZiB0aGUgaW5uZXIgYXJjaGl2ZSBoYXMgYmVlbiBoaXQuIFRoaXMgaXMgYSBjYXNlCiAgd2hlcmUgWmlwQXJjaGl2ZUlucHV0U3RyZWFtIHNpbXBseSBjYW4gbm90IGJlIHVzZWQgYW5kIG9ubHkKICBaaXBGaWxlIGlzIGFibGUgdG8gcmVhZCB0aGUgYXJjaGl2ZS4KCiAgVGhlIG9ubHkgb3RoZXIgZXhwbGFuYXRpb24gaXMgYSBicm9rZW4gYXJjaGl2ZS4gU28gdGhlCiAgZXhjZXB0aW9uIHByZXZlbnRzIHVzZXJzIGZyb20gdGhpbmtpbmcgdGhleSBoYWQgc3VjY2Vzc2Z1bGx5CiAgcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGFyY2hpdmUuCiAgSXNzdWU6IENPTVBSRVNTLTQ4My4KKiBUaGUgN3ppcCB0b29scyBwcm92aWRlIGEgZGVmYXVsdCBuYW1lIGZvciBhcmNoaXZlIGVudHJpZXMKICB3aXRob3V0IG5hbWU7IFNldmVuWkZpbGUgcmV0dXJucyBhIG51bGwgbmFtZSBmb3Igc3VjaAogIGVudHJpZXMuIEEgbmV3IG1ldGhvZCBnZXREZWZhdWx0TmFtZSBoYXMgYmVlbiBhZGRlZCB0byBkZXJpdmUKICB0aGUgc2FtZSBuYW1lIHRoZSA3emlwIHRvb2xzIHdvdWxkIHVzZSBhbmQgYW4gb3B0aW9uIGhhcyBiZWVuCiAgYWRkZWQgdGhhdCBzZXRzIFNldmVuWkFyY2hpdmVFbnRyeSdzIG5hbWUgdG8gdGhlIGRlZmF1bHQgbmFtZQogIGlmIGl0IGlzIG5vdCBjb250YWluZWQgaW5zaWRlIHRoZSBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy00NzguCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjE4Ci0tLS0tLS0tLS0tLQoKVGhpcyByZWxlYXNlIGNoYW5nZXMgdGhlIE9TR2kgTWFuaWZlc3QgZW50cnkgQnVuZGxlLVN5bWJvbGljTmFtZSBmcm9tCm9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyB0byBvcmcuYXBhY2hlLmNvbW1vbnMuY29tbW9ucy1jb21wcmVzcy4KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBJdCBpcyBub3cgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgYXJndW1lbnRzIG9mIHpzdGQtam5pJ3MKICBac3RkT3V0cHV0U3RyZWFtIGNvbnN0cnVjdG9ycyB2aWEgQ29tbW9ucyBDb21wcmVzcyBhcyB3ZWxsLgogIElzc3VlOiBDT01QUkVTUy00NjAuCiAgVGhhbmtzIHRvIENhcm1pIEdydXNoa28uCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBUaGUgZXhhbXBsZSBFeHBhbmRlciBjbGFzcyBoYXMgYmVlbiB2dWxuZXJhYmxlIHRvIGEgcGF0aAogIHRyYXZlcnNhbCBpbiB0aGUgZWRnZSBjYXNlIHRoYXQgaGFwcGVucyB3aGVuIHRoZSB0YXJnZXQKICBkaXJlY3RvcnkgaGFzIGEgc2libGluZyBkaXJlY3RvcnkgYW5kIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQKICBkaXJlY3RvcnkgaXMgYSBwcmVmaXggb2YgdGhlIHNpYmxpbmcgZGlyZWN0b3J5J3MgbmFtZS4KICBUaGFua3MgdG8gRGlkaWVyIExvaXNlYXUuCiogQ2hhbmdlZCB0aGUgT1NHaSBJbXBvcnQtUGFja2FnZSB0byBhbHNvIG9wdGlvbmFsbHkgaW1wb3J0CiAgamF2YXguY3J5cHRvIHNvIGVuY3J5cHRlZCBhcmNoaXZlcyBjYW4gYmUgcmVhZC4KICBJc3N1ZTogQ09NUFJFU1MtNDU2LgoqIENoYW5nZWQgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNsb3NlIG1ldGhvZCB0byBiZXR0ZXIKICBlbnN1cmUgYWxsIGhlbGQgcmVzb3VyY2VzIGdldCBjbG9zZWQgZXZlbiBpZiBleGNlcHRpb25zIGFyZQogIHRocm93biBkdXJpbmcgdGhlIGNsb3NpbmcgdGhlIHN0cmVhbS4KICBJc3N1ZTogQ09NUFJFU1MtNDU3LgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBjYW4gbm93IGRldGVjdCB0aGUgQVBLIFNpZ25pbmcgQmxvY2sKICB1c2VkIGluIHNpZ25lZCBBbmRyb2lkIEFQSyBmaWxlcyBhbmQgdHJlYXRzIGl0IGFzIGFuICJlbmQgb2YKICBhcmNoaXZlIiBtYXJrZXIuCiAgSXNzdWU6IENPTVBSRVNTLTQ1NS4KKiBUaGUgY3BpbyBzdHJlYW1zIGRpZG4ndCBoYW5kbGUgYXJjaGl2ZXMgdXNpbmcgYSBtdWx0aS1ieXRlCiAgZW5jb2RpbmcgcHJvcGVybHkuCiAgSXNzdWU6IENPTVBSRVNTLTQ1OS4KICBUaGFua3MgdG8gSmVucyBSZWltYW5uLgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSNyZWFkIHdvdWxkIHNpbGVudGx5IHJldHVybiAtMSBvbiBhCiAgY29ycnVwdGVkIHN0b3JlZCBlbnRyeSBhbmQgZXZlbiByZXR1cm4gPiAwIGFmdGVyIGhpdHRpbmcgdGhlCiAgZW5kIG9mIHRoZSBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy00NjMuCiogQXJBcmNoaXZlSW5wdXRTdHJlYW0jcmVhZCB3b3VsZCBhbGxvdyB0byByZWFkIGZyb20gdGhlIHN0cmVhbQogIHdpdGhvdXQgb3BlbmluZyBhbiBlbnRyeSBhdCBhbGwuCiAgSXNzdWU6IENPTVBSRVNTLTQ2Mi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMTcKLS0tLS0tLS0tLS0tCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogQWRkZWQgYSB1bml0IHRlc3QgdGhhdCBpcyBzdXBwb3NlZCB0byBmYWlsIGlmIHdlIGJyZWFrIHRoZQogIE9TR2kgbWFuaWZlc3QgZW50cmllcyBhZ2Fpbi4KICBJc3N1ZTogQ09NUFJFU1MtNDQzLgoqIEFkZCBhIG5ldyBTa2lwU2hpZWxkaW5nSW5wdXRTdHJlYW0gY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB3aXRoCiAgc3RyZWFtcyB0aGF0IHRocm93IGFuIElPRXhjZXB0aW9uIHdoZW4gc2tpcCBpcyBpbnZva2VkLgogIElzc3VlOiBDT01QUkVTUy00NDkuCiogTmV3IGNvbnN0cnVjdG9ycyBoYXZlIGJlZW4gYWRkZWQgdG8gU2V2ZW5aRmlsZSB0aGF0IGFjY2VwdAogIGNoYXJbXXMgcmF0aGVyIHRoYW4gYnl0ZVtdcyBpbiBvcmRlciB0byBhdm9pZCBhIGNvbW1vbiBlcnJvcgogIG9mIHVzaW5nIHRoZSB3cm9uZyBlbmNvZGluZyB3aGVuIGNyZWF0aW5nIHRoZSBieXRlW10uICBUaGlzCiAgY2hhbmdlIG1heSBicmVhayBzb3VyY2UgY29tcGF0aWJpbGl0eSBmb3IgY2xpZW50IGNvZGUgdGhhdAogIHVzZXMgb25lIG9mIHRoZSBjb25zdHJ1Y3RvcnMgZXhwZWN0aW5nIGEgcGFzc3dvcmQgYW5kIHBhc3NlcwogIGluIG51bGwgYXMgcGFzc3dvcmQuIFdlIHJlY29tbWVuZCB0byBjaGFuZ2UgdGhlIGNvZGUgdG8gdXNlIGEKICBjb25zdHJ1Y3RvciB3aXRob3V0IHBhc3N3b3JkIGFyZ3VtZW50LgogIElzc3VlOiBDT01QUkVTUy00NTIuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBSZW1vdmVkIHRoZSBvYmplbmVzaXMgZGVwZW5kZW5jeSBmcm9tIHRoZSBwb20gYXMgaXQgaXMgbm90CiAgbmVlZGVkIGF0IGFsbC4KKiBGaXhlZCByZXNvdXJjZSBsZWFrIGluIFBhcmFsbGVsU2NhdHRlclppcENyZWF0b3Ijd3JpdGVUby4KICBJc3N1ZTogQ09NUFJFU1MtNDQ2LgoqIENlcnRhaW4gZXJyb3JzIHdoZW4gcGFyc2luZyBaSVAgZXh0cmEgZmllbGRzIGluIGNvcnJ1cHQKICBhcmNoaXZlcyBhcmUgbm93IHR1cm5lZCBpbnRvIFppcEV4Y2VwdGlvbiwgdGhleSB1c2VkIHRvCiAgbWFuaWZlc3QgYXMgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGJlZm9yZS4KICBJc3N1ZTogQ09NUFJFU1MtNDQ3LgoqIElPVXRpbHMuY29weSBub3cgdmVyaWZpZXMgdGhlIGJ1ZmZlciBzaXplIGlzIGJpZ2dlciB0aGFuIDAuCiAgSXNzdWU6IENPTVBSRVNTLTQ1MS4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gZmFpbGVkIHRvIHJlYWQgc29tZSBmaWxlcyB3aXRoIHN0b3JlZAogIGVudHJpZXMgdXNpbmcgYSBkYXRhIGRlc2NyaXB0b3IuCiAgSXNzdWU6IENPTVBSRVNTLTQ1NC4KCkNoYW5nZXMKLS0tLS0tLQoqIEZpeGVkIHNvbWUgY29kZSBleGFtcGxlcy4KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICM2My4KICBUaGFua3MgdG8gTWFyY2hlbmtvIFNlcmdleS4KKiBUaGUgc3RyZWFtcyByZXR1cm5lZCBieSBaaXBGaWxlIGFuZCBtb3N0IG90aGVyIGRlY29tcHJlc3NpbmcKICBzdHJlYW1zIG5vdyBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgY29tcHJlc3NlZAogIGFuZCB1bmNvbXByZXNzZWQgYnl0ZXMgcmVhZCBzbyBmYXIuIFRoaXMgbWF5IGJlIHVzZWQgdG8gZGV0ZWN0CiAgYSBaaXBCb21iIGlmIHRoZSBjb21wcmVzc2lvbiByYXRpbyBleGNlZWRzIGEgY2VydGFpbgogIHRocmVzaG9sZCwgZm9yIGV4YW1wbGUuCiAgRm9yIFNldmVuWkZpbGUgYSBuZXcgbWV0aG9kIHJldHVybnMgdGhlIHN0YXRpc3RpY3MgZm9yIHRoZQogIGN1cnJlbnQgZW50cnkuCiAgSXNzdWU6IENPTVBSRVNTLTQ0NS4KICBUaGFua3MgdG8gQW5kcmVhcyBCZWVrZXIuCiogQWRkZWQgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBBZG9wdE9wZW5KREsgZm9yIFMvMzkwIHRvCiAgQlppcDJDb21wcmVzc29ySW5wdXRTdHJlYW0uCiAgSXNzdWU6IENPTVBSRVNTLTQ1My4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMTYuMQotLS0tLS0tLS0tLS0tLQoKRml4ZWQgQnVnCi0tLS0tLS0tLQoqIEZpeGVkIHRoZSBPU0dpIG1hbmlmZXN0IGVudHJ5IGZvciBpbXBvcnRzIHRoYXQgaGFzIGJlZW4gYnJva2VuCiAgaW4gMS4xNi4KICBJc3N1ZTogQ09NUFJFU1MtNDQyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4xNgotLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBBZGQgcmVhZC1vbmx5IHN1cHBvcnQgZm9yIFpzdGFuZGFyZCBjb21wcmVzc2lvbiBiYXNlZCBvbiB0aGUKICBac3RkLWpuaSBwcm9qZWN0LgogIElzc3VlOiBDT01QUkVTUy00MjMuIFRoYW5rcyB0byBBbmRyZSBGIGRlIE1pcmFuZGEuCiogQWRkZWQgYXV0by1kZXRlY3Rpb24gZm9yIFpzdGFuZGFyZCBjb21wcmVzc2VkIHN0cmVhbXMuCiAgSXNzdWU6IENPTVBSRVNTLTQyNS4KKiBBZGRlZCB3cml0ZS1zdXBwb3J0IGZvciBac3RhbmRhcmQgY29tcHJlc3Npb24uCiAgSXNzdWU6IENPTVBSRVNTLTQyNi4KKiBBZGRlZCByZWFkLW9ubHkgREVGTEFURTY0IHN1cHBvcnQgdG8gWklQIGFyY2hpdmVzIGFuZCBhcwogIHN0YW5kLWFsb25lIENvbXByZXNzb3JJbnB1dFN0cmVhbS4KICBJc3N1ZTogQ09NUFJFU1MtMzgwLiBUaGFua3MgdG8gQ2hyaXN0aWFuIE1hcnF1ZXogR3JhYmlhLgoqIEFkZGVkIHJlYWQtb25seSBERUZMQVRFNjQgc3VwcG9ydCB0byA3eiBhcmNoaXZlcy4KICBJc3N1ZTogQ09NUFJFU1MtNDM3LgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogU3luY2hyb25pemVkIGl0ZXJhdGlvbiBvdmVyIGEgc3luY2hyb25pemVkTGlzdCBpbgogIFBhcmFsbGVsU2NhdHRlclppcENyZWF0b3IuCiAgSXNzdWU6IENPTVBSRVNTLTQzMC4gVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YS4KKiBaaXBGaWxlIGNvdWxkIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIHdoZW4gcGFyc2luZyBaSVAKICBhcmNoaXZlcyB3aXRoIGNlcnRhaW4gc3Ryb25nIGVuY3J5cHRpb24gaGVhZGVycy4KICBJc3N1ZTogQ09NUFJFU1MtNDMyLgoqIEFkZGVkIGltcHJvdmVkIGNoZWNrcyB0byBkZXRlY3QgY29ycnVwdGVkIGJ6aXAyIHN0cmVhbXMgYW5kCiAgdGhyb3cgdGhlIGV4cGVjdGVkIElPRXhjZXB0aW9uIHJhdGhlciB0aGFuIG9ic2N1cmUKICBSdW50aW1lRXhjZXB0aW9ucy4KICBJc3N1ZTogQ09NUFJFU1MtNDI0LgoKQ2hhbmdlcwotLS0tLS0tCiogUmVwbGFjZXMgaW5zdGFuY2VvZiBjaGVja3Mgd2l0aCBhIHR5cGUgbWFya2VyIGluIExaNzcgc3VwcG9ydCBjb2RlLgogIElzc3VlOiBDT01QUkVTUy00MzUuIFRoYW5rcyB0byBCRUxVR0EgQkVIUi4KKiBVcGRhdGVkIFhaIGZvciBKYXZhIGRlcGVuZGVuY3kgdG8gMS44IGluIG9yZGVyIHRvIHBpY2sgdXAgYnVnIGZpeAogIHRvIExaTUEySW5wdXRTdHJlYW0ncyBhdmFpbGFibGUgbWV0aG9kLgoqIFppcEFyY2hpdmVFbnRyeSBub3cgZXhwb3NlcyBob3cgdGhlIG5hbWUgb3IgY29tbWVudCBoYXZlIGJlZW4KICBkZXRlcm1pbmVkIHdoZW4gdGhlIGVudHJ5IHdhcyByZWFkLgogIElzc3VlOiBDT01QUkVTUy00MjkuIFRoYW5rcyB0byBEYW1pYW5vIEFsYmFuaS4KKiBaaXBGaWxlLmdldElucHV0U3RyZWFtIHdpbGwgbm93IGFsd2F5cyBidWZmZXIgdGhlIHN0cmVhbQogIGludGVybmFsbHkgaW4gb3JkZXIgdG8gaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlLgogIElzc3VlOiBDT01QUkVTUy00MzguCiogU3BlZWQgaW1wcm92ZW1lbnQgZm9yIERFRkxBVEU2NCBkZWNvbXByZXNzaW9uLgogIElzc3VlOiBDT01QUkVTUy00NDAuIFRoYW5rcyB0byBEYXdpZCBXZWlzcy4KKiBBZGRlZCBhIGZldyBleHRyYSBzYW5pdHkgY2hlY2tzIGZvciB0aGUgcmFyZXIgY29tcHJlc3Npb24KICBtZXRob2RzIHVzZWQgaW4gWklQIGFyY2hpdmVzLgogIElzc3VlOiBDT01QUkVTUy00MzYuCiogU2ltcGxpZmllZCB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGR1bW15IGJ5dGUgcmVxdWlyZWQgYnkKICB6bGliIHdoZW4gdXNpbmcgamF2YS51dGlsLnppcC5JbmZsYXRlci4KICBJc3N1ZTogQ09NUFJFU1MtNDQxLgoqIFZhcmlvdXMgY29kZSBjbGVhbnVwcy4KICBHaXRodWIgUHVsbCBSZXF1ZXN0ICM2MS4gVGhhbmtzIHRvIFNoYWhhYiBLb25kcmkuCiogVGFyQXJjaGl2ZUVudHJ5J3MgcHJlc2VydmVMZWFkaW5nU2xhc2hlcyBjb25zdHJ1Y3RvciBhcmd1bWVudAogIGhhcyBiZWVuIHJlbmFtZWQgYW5kIGNhbiBub3cgYWxzbyBiZSB1c2VkIHRvIHByZXNlcnZlIHRoZQogIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4xNQotLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBBZGRlZCBtYWdpYyBNQU5JRkVTVCBlbnRyeSBBdXRvbWF0aWMtTW9kdWxlLU5hbWUgc28gdGhlIG1vZHVsZQogIG5hbWUgd2lsbCBiZSBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3Mgd2hlbiB0aGUgamFyIGlzIHVzZWQKICBhcyBhbiBhdXRvbWF0aWMgbW9kdWxlIGluIEphdmE5LgogIElzc3VlOiBDT01QUkVTUy0zOTcuCiogQWRkZWQgYSBuZXcgdXRpbGl0eSBjbGFzcyBGaXhlZExlbmd0aEJsb2NrT3V0cHV0U3RyZWFtIHRoYXQKICBjYW4gYmUgdXNlZCB0byBlbnN1cmUgd3JpdGluZyBhbHdheXMgaGFwcGVucyBpbiBibG9ja3Mgb2YgYQogIGdpdmVuIHNpemUuCiAgSXNzdWU6IENPTVBSRVNTLTQwNS4gVGhhbmtzIHRvIFNpbW9uIFNwZXJvLgoqIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBzcGVjaWZ5L3JlYWQgY3VzdG9tIFBBWCBoZWFkZXJzIHdoZW4KICB3cml0aW5nL3JlYWRpbmcgdGFyIGFyY2hpdmVzLgogIElzc3VlOiBDT01QUkVTUy00MDAuIFRoYW5rcyB0byBTaW1vbiBTcGVyby4KCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqIE1ha2Ugc3VyZSAidmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdCIgaW4gbG9jYWwgZmlsZSBoZWFkZXIgYW5kCiAgY2VudHJhbCBkaXJlY3Rvcnkgb2YgYSBaSVAgYXJjaGl2ZSBhZ3JlZSB3aXRoIGVhY2ggb3RoZXIuCiAgQWxzbyBlbnN1cmUgdGhlIHZlcnNpb24gaXMgc2V0IHRvIDIuMCBpZiBERUZMQVRFIGlzIHVzZWQuCiAgSXNzdWU6IENPTVBSRVNTLTM5NC4KKiBEb24ndCB1c2UgYSBkYXRhIGRlc2NyaXB0b3IgaW4gWklQIGFyY2hpdmVzIHdoZW4gY29weWluZyBhIHJhdwogIGVudHJ5IHRoYXQgYWxyZWFkeSBrbm93cyBpdHMgc2l6ZSBhbmQgQ1JDIGluZm9ybWF0aW9uLgogIElzc3VlOiBDT01QUkVTUy0zOTUuCiogVHJhdmlzIGJ1aWxkIHJlZHVuZGFudGx5IHJlcGVhdHMgY29tcGlsYXRpb24gYW5kIHRlc3RzIHJlZHVuZGFudGx5CiAgR2l0SHViIFB1bGwgUmVxdWVzdCAjNDMuIFRoYW5rcyB0byBTaW1vbiBTcGVyby4KICBJc3N1ZTogQ09NUFJFU1MtNDEzCiogVGhlIE1BTklGRVNUIG9mIDEuMTQgbGFja3MgYW4gT1NHaSBJbXBvcnQtUGFja2FnZSBmb3IgWFogZm9yCiAgSmF2YS4KICBJc3N1ZTogQ09NUFJFU1MtMzk2LgoqIEJVSUxESU5HLm1kIG5vdyBwYXNzZXMgdGhlIFJBVCBjaGVjay4KICBJc3N1ZTogQ09NUFJFU1MtNDA2LiBUaGFua3MgdG8gU2ltb24gU3Blcm8uCiogTWFkZSBzdXJlIENoZWNrc3VtQ2FsY3VsYXRpbmdJbnB1dFN0cmVhbSByZWNlaXZlcyB2YWxpZAogIGNoZWNrc3VtIGFuZCBpbnB1dCBzdHJlYW0gaW5zdGFuY2VzIHZpYSB0aGUgY29uc3RydWN0b3IuCiAgSXNzdWU6IENPTVBSRVNTLTQxMi4gVGhhbmtzIHRvIE1pY2hhZWwgSGF1c2VnZ2VyLgoqIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0gbm93IHZlcmlmaWVzIHRoZSBibG9jayBhbmQgcmVjb3JkIHNpemVzCiAgc3BlY2lmaWVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcgogIHNwZWNpZmljYXRpb24uIEluIHBhcnRpY3VsYXIgNTEyIGlzIHRoZSBvbmx5IHJlY29yZCBzaXplCiAgYWNjZXB0ZWQgYW5kIHRoZSBibG9jayBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA1MTIuCiAgSXNzdWU6IENPTVBSRVNTLTQwNy4gVGhhbmtzIHRvIFNpbW9uIFNwZXJvLgoqIEZpeGVkIGNsYXNzIG5hbWVzIG9mIENwaW9BcmNoaXZlRW50cnkgYW5kCiAgQ3Bpb0FyY2hpdmVJbnB1dFN0cmVhbSBpbiB2YXJpb3VzIEphdmFkb2NzLgogIElzc3VlOiBDT01QUkVTUy00MTUuCiogVGhlIGNvZGUgb2YgdGhlIGV4dGVuZGVkIHRpbWVzdGFtcCB6aXAgZXh0cmEgZmllbGQgaW5jb3JyZWN0bHkKICBhc3N1bWVkIHRoZSB0aW1lIHdhcyBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGludCBhbmQgdGh1cwogIGNyZWF0ZWQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIHllYXJzIGFmdGVyIDIwMzcuCiAgSXNzdWU6IENPTVBSRVNTLTQxNi4gVGhhbmtzIHRvIFNpbW9uIFNwZXJvLgoqIFJlbW92ZWQgWmlwRW5jb2RpbmcgY29kZSB0aGF0IGJlY2FtZSBvYnNvbGV0ZSB3aGVuIHdlIHN0YXJ0ZWQKICB0byByZXF1aXJlIEphdmEgNSBhcyBiYXNlbGluZSBsb25nIGFnby4KICBJc3N1ZTogQ09NUFJFU1MtNDEwLiBUaGFua3MgdG8gU2ltb24gU3Blcm8uCiogVGhlIHRhciBwYWNrYWdlIHdpbGwgbm8gbG9uZ2VyIHRyeSB0byBwYXJzZSB0aGUgbWFqb3IgYW5kCiAgbWlub3IgZGV2aWNlIG51bWJlcnMgdW5sZXNzIHRoZSBlbnRyeSByZXByZXNlbnRzIGEgY2hhcmFjdGVyCiAgb3IgYmxvY2sgc3BlY2lhbCBmaWxlLgogIElzc3VlOiBDT01QUkVTUy00MTcuCiogV2hlbiByZWFkaW5nIHRhciBoZWFkZXJzIHdpdGggbmFtZSBmaWVsZHMgY29udGFpbmluZyBlbWJlZGRlZAogIE5VTHMsIHRoZSBuYW1lIHdpbGwgbm93IGJlIHRlcm1pbmF0ZWQgYXQgdGhlIGZpcnN0IE5VTCBieXRlLgogIElzc3VlOiBDT01QUkVTUy00MjEuIFRoYW5rcyB0byBSb2VsIFNwaWxrZXIuCiogU2ltcGxpZmllZCBUYXJBcmNoaXZlT3V0cHV0U3RyZWFtIGJ5IHJlcGxhY2luZyB0aGUgaW50ZXJuYWwKICBidWZmZXJpbmcgd2l0aCBuZXcgY2xhc3MgRml4ZWRMZW5ndGhCbG9ja091dHB1dFN0cmVhbS4KICBJc3N1ZTogQ09NUFJFU1MtNDA5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4xNAotLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBBZGRlZCB3cml0ZSBzdXBwb3J0IGZvciBTbmFwcHkuCiAgSXNzdWU6IENPTVBSRVNTLTI0Ni4KKiBBZGRlZCBzdXBwb3J0IGZvciBMWjQgKGJsb2NrIGFuZCBmcmFtZSBmb3JtYXQpLgogIElzc3VlOiBDT01QUkVTUy0yNzEuCiogQWRkIHN0YXRpYyBkZXRlY3QoSW5wdXRTdHJlYW0gaW4pIHRvIENvbXByZXNzb3JTdHJlYW1GYWN0b3J5CiAgYW5kIEFyY2hpdmVTdHJlYW1GYWN0b3J5CiAgSXNzdWU6IENPTVBSRVNTLTM4NS4KKiBBZGRlZCBhIHdheSB0byBsaW1pdCBhbW91bnQgb2YgbWVtb3J5IFpDb21wcmVzc29yU3RyZWFtIG1heQogIHVzZS4KICBJc3N1ZTogQ09NUFJFU1MtMzgyLiBUaGFua3MgdG8gVGltIEFsbGlzb24uCiogQWRkZWQgYSB3YXkgdG8gbGltaXQgYW1vdW50IG9mIG1lbW9yeSBaQ29tcHJlc3NvclN0cmVhbSBtYXkKICB1c2UuCiAgSXNzdWU6IENPTVBSRVNTLTM4Ni4gVGhhbmtzIHRvIFRpbSBBbGxpc29uLgoqIEFkZGVkIGEgd2F5IHRvIGxpbWl0IGFtb3VudCBvZiBtZW1vcnkgTFpNQUNvbXByZXNzb3JTdHJlYW0gYW5kCiAgWFpDb21wcmVzc29ySW5wdXRTdHJlYW0gbWF5IHVzZS4KICBJc3N1ZTogQ09NUFJFU1MtMzgyLiBUaGFua3MgdG8gVGltIEFsbGlzb24uCiogQWRkIEJyb3RsaSBkZWNvZGVyIGJhc2VkIG9uIHRoZSBHb29nbGUgQnJvdGxpIGxpYnJhcnkuCiAgSXNzdWU6IENPTVBSRVNTLTM5Mi4gVGhhbmtzIHRvIFBoaWxpcHBlIE1vdWF3YWQuCiogWmlwRW50cnkgbm93IGV4cG9zZXMgaXRzIGRhdGEgb2Zmc2V0LgogIElzc3VlOiBDT01QUkVTUy0zOTAuIFRoYW5rcyB0byBaYnluZWsgVnlza292c2t5LgoqIFVzaW5nIFppcEFyY2hpdmVFbnRyeSdzIHNldEFsaWdubWVudCBpdCBpcyBub3cgcG9zc2libGUgdG8KICBlbnN1cmUgdGhlIGRhdGEgb2Zmc2V0IG9mIGFuIGVudHJ5IHN0YXJ0cyBhdCBhIGZpbGUgcG9zaXRpb24KICB0aGF0IGF0IHdvcmQgb3IgcGFnZSBib3VuZGFyaWVzLgogIEEgbmV3IGV4dHJhIGZpZWxkIGhhcyBiZWVuIGFkZGVkIGZvciB0aGlzIHB1cnBvc2UuCiAgSXNzdWU6IENPTVBSRVNTLTM5MS4gVGhhbmtzIHRvIFpieW5layBWeXNrb3Zza3kuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBTbmFwcHlDb21wcmVzc29ySW5wdXRTdHJlYW0gc2xpZGVzIHRoZSB3aW5kb3cgdG9vIGVhcmx5CiAgbGVhZGluZyB0byBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb25zIGZvciBzb21lIHN0cmVhbXMuCiAgSXNzdWU6IENPTVBSRVNTLTM3OC4KKiBaaXBBcmNoaXZlRW50cnkjaXNVbml4U3ltbGluayBub3cgb25seSByZXR1cm5zIHRydWUgaWYgdGhlCiAgY29ycmVzcG9uZGluZyBsaW5rIGZsYWcgaXMgdGhlIG9ubHkgZmlsZS10eXBlIGZsYWcgc2V0LgogIElzc3VlOiBDT01QUkVTUy0zNzkuIFRoYW5rcyB0byBHdWlsbGF1bWUgQm91w6kuCiogRml4ZWQgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBDUElPJ3MgQ1JDIGNhbGN1bGF0aW9uLgogIFB1bGwgUmVxdWVzdCAjMTcuIFRoYW5rcyB0byBEYW5pZWwgQ29sbGluLgoqIE1ha2UgdW5pdCB0ZXN0cyB3b3JrIG9uIFdpbmRvd3MgcGF0aHMgd2l0aCBzcGFjZXMgaW4gdGhlaXIgbmFtZXMuCiAgSXNzdWU6IENPTVBSRVNTLTM4Ny4KKiBJbnRlcm5hbCBsb2NhdGlvbiBwb2ludGVyIGluIFppcEZpbGUgY291bGQgZ2V0IGluY3JlbWVudGVkCiAgZXZlbiBpZiBub3RoaW5nIGhhZCBiZWVuIHJlYWQuCiAgSXNzdWU6IENPTVBSRVNTLTM4OS4KKiBMWk1BQ29tcHJlc3Nvck91dHB1dFN0cmVhbSNmbHVzaCB3b3VsZCB0aHJvdyBhbiBleGNlcHRpb24KICByYXRoZXIgdGhhbiBiZSB0aGUgTk9QIGl0IHByb21pc2VkIHRvIGJlLgogIElzc3VlOiBDT01QUkVTUy0zOTMuCgpDaGFuZ2VzCi0tLS0tLS0KKiBUaGUgYmxvY2tzaXplIGZvciBGcmFtZWRTbmFwcHlDb21wcmVzc29ySW5wdXRTdHJlYW0gY2FuIG5vdyBiZQogIGNvbmZpZ3VyZWQgYXMgc29tZSBJV0EgZmlsZXMgc2VlbSB0byBiZSB1c2luZyBibG9ja3MgbGFyZ2VyCiAgdGhhbiB0aGUgZGVmYXVsdCAzMmsuCiAgSXNzdWU6IENPTVBSRVNTLTM1OC4KKiBCWmlwMkNvbXByZXNzb3JJbnB1dHN0cmVhbSBub3cgdXNlcyBCaXRJbnB1dFN0cmVhbSBpbnRlcm5hbGx5LgogIFB1bGwgUmVxdWVzdCAjMTMuIFRoYW5rcyB0byBUaG9tYXMgTWV5ZXIuCiogSW1wcm92ZWQgcGVyZm9ybWFuY2UgZm9yIGNvbmN1cnJlbnQgcmVhZHMgZnJvbSBaaXBGaWxlIHdoZW4KICByZWFkaW5nIGZyb20gYSBmaWxlLgogIElzc3VlOiBDT01QUkVTUy0zODguIFRoYW5rcyB0byBaYnluZWsgVnlza292c2t5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4xMwotLS0tLS0tLS0tLS0KCkNvbW1vbnMgQ29tcHJlc3MgMS4xMyBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0byByZXF1aXJlIEphdmEgNyBhdApydW50aW1lLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBTZXZlblpGaWxlLCBTZXZlblpPdXRwdXRGaWxlLCBaaXBGaWxlIGFuZAogIFppcEFyY2hpdmVPdXRwdXRTdHJlYW0gY2FuIG5vdyB3b3JrIG9uIG5vbi1maWxlIHJlc291cmNlcyBpZgogIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIHZpYSBTZWVrYWJsZUJ5dGVDaGFubmVsLgogIElzc3VlOiBDT01QUkVTUy0zMjcuCiogQWxsb3cgY29tcHJlc3NvciBleHRlbnNpb25zIHRocm91Z2ggYSBzdGFuZGFyZCBKUkUgU2VydmljZUxvYWRlci4KICBJc3N1ZTogQ09NUFJFU1MtMzY4LgoqIEFsbG93IGFyY2hpdmUgZXh0ZW5zaW9ucyB0aHJvdWdoIGEgc3RhbmRhcmQgSlJFIFNlcnZpY2VMb2FkZXIuCiAgSXNzdWU6IENPTVBSRVNTLTM2OS4KKiBBZGQgd3JpdGUgc3VwcG9ydCBmb3IgdGhlIGxlZ2FjeSBMWk1BIGZvcm1hdCwgdGhpcyByZXF1aXJlcyBYWgogIGZvciBKYXZhIDEuNi4KICBJc3N1ZTogQ09NUFJFU1MtMzczLgoqIEFkZCB3cml0ZSBzdXBwb3J0IGZvciB0aGUgbGVnYWN5IExaTUEgc3RyZWFtIHRvIDd6LCB0aGlzCiAgcmVxdWlyZXMgWFogZm9yIEphdmEgMS42LgogIElzc3VlOiBDT01QUkVTUy0zNzQuCiogQWxsb3cgdGhlIGNsaWVudHMgb2YgUGFyYWxsZWxTY2F0dGVyWmlwQ3JlYXRvciB0byBwcm92aWRlCiAgWmlwQXJjaGl2ZUVudHJ5UmVxdWVzdFN1cHBsaWVyLgogIElzc3VlOiBDT01QUkVTUy0zNzUuIFRoYW5rcyB0byBQbGFtZW4gVG90ZXYuCiogQWRkIGEgdmVyc2lvbi1pbmRlcGVuZGVudCBsaW5rIHRvIHRoZSBBUEkgZG9jcyBvZiB0aGUgbGF0ZXN0CiAgcmVsZWFzZS4KICBJc3N1ZTogQ09NUFJFU1MtMzcyLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogQml0SW5wdXRTdHJlYW0gY291bGQgcmV0dXJuIGJhZCByZXN1bHRzIHdoZW4gb3ZlcmZsb3dpbmcKICBpbnRlcm5hbGx5IC0gaWYgdHdvIGNvbnNlY3V0aXZlIHJlYWRzIHRyaWVkIHRvIHJlYWQgbW9yZSB0aGFuCiAgNjQgYml0cy4KICBJc3N1ZTogQ09NUFJFU1MtMzYzLgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbS5jbG9zZUVudHJ5IGRvZXMgbm90IHByb3Blcmx5IGFkdmFuY2UgdG8KICBuZXh0IGVudHJ5IGlmIHRoZXJlIGFyZSBqdW5rIGJ5dGVzIGF0IGVuZCBvZiBkYXRhIHNlY3Rpb24uCiAgSXNzdWU6IENPTVBSRVNTLTM2NC4gVGhhbmtzIHRvIE1pa2UgTW9sZS4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gbm93IHRocm93cyBhbiBFeGNlcHRpb24gaWYgaXQgZW5jb3VudGVycwogIGEgYnJva2VuIFpJUCBhcmNoaXZlIHJhdGhlciB0aGFuIHNpZ25hbGluZyBlbmQtb2YtYXJjaGl2ZS4KICBJc3N1ZTogQ09NUFJFU1MtMzY3LiBUaGFua3MgdG8gTWlrZSBNb2xlLgoqIFNjYXR0ZXJaaXBPdXRwdXRTdHJlYW0gZGlkbid0IGNsb3NlIHRoZSBTdHJlYW1Db21wcmVzc29yCiAgY2F1c2luZyBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrLgogIElzc3VlOiBDT01QUkVTUy0zNzcuCgpDaGFuZ2VzCi0tLS0tLS0KKiBVcGRhdGUgSmF2YSByZXF1aXJlbWVudCBmcm9tIDYgdG8gNy4KICBJc3N1ZTogQ09NUFJFU1MtMzYwLgoqIENsYXJpZmllZCB3aGljaCBUYXJBcmNoaXZlRW50cnkgbWV0aG9kcyBhcmUgdXNlbGVzcyBmb3IKICBlbnRyaWVzIHJlYWQgZnJvbSBhbiBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy0zNjYuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjEyCi0tLS0tLS0tLS0tLQoKQ29tbW9ucyBDb21wcmVzcyAxLjEyIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRvIHJlcXVpcmUgSmF2YSA2IGF0CnJ1bnRpbWUuCgpSZWxlYXNlIDEuMTIgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgQlppcDJDb21wcmVzc29yT3V0cHV0U3RyZWFtJ3MKZmluYWxpemUgbWV0aG9kIHNvIHRoYXQgaXQgbm8gbG9uZ2VyIGludm9rZXMgZmluaXNoLiBUaGlzIGlzIGdvaW5nIHRvCmJyZWFrIGNvZGUgdGhhdCByZWxpZWQgb24gdGhlIGZpbmFsaXplciB0byBjbGVhbiB1cCBhbiB1bmZpbmlzaGVkCnN0cmVhbS4gVGhlIGNvZGUgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgdG8gY2FsbCBmaW5pc2ggb3IgY2xvc2UKaXRzZWxmLiBOb3RlIHRoYXQgYSBmaW5hbGl6ZXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gcnVuLCBzbyB0aGUgZmVhdHVyZQp3YXMgbm90IDEwMCUgZWZmZWN0aXZlIGluIGFueSBjYXNlLgoKTmV3IGZlYXR1cmVzCi0tLS0tLS0tLS0tLQoqIEZyYW1lZFNuYXBweUNvbXByZXNzb3JJbnB1dFN0cmVhbSBub3cgc3VwcG9ydHMgdGhlIGRpYWxlY3Qgb2YKICBTbmFwcHkgdXNlZCBieSB0aGUgSVdBIGZpbGVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHppcCBhcmNoaXZlcwogIHVzZWQgaW4gQXBwbGUncyBpV29yayAxMyBmaWxlcy4KICBJc3N1ZTogQ09NUFJFU1MtMzUyLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogU2V2ZW5aRmlsZS5yZWFkKCkgdGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBmb3IgZW1wdHkgZW50cmllcy4KICBJc3N1ZTogQ09NUFJFU1MtMzQ4LgoqIFRhckFyY2hpdmVJbnB1dFN0cmVhbSBmYWlsZWQgdG8gcGFyc2UgUEFYIGhlYWRlcnMgdGhhdCBpbmNsdWRlZAogIGJsYW5rIGxpbmVzLgogIElzc3VlOiBDT01QUkVTUy0zNTUuIFRoYW5rcyB0byBKZXJlbXkgR3VzdGllLgoqIFRhckFyY2hpdmVJbnB1dFN0cmVhbSBmYWlsZWQgdG8gcGFyc2UgUEFYIGhlYWRlcnMgd2hvc2UgdGFyIGVudHJ5CiAgbmFtZSBlbmRlZCB3aXRoIGEgc2xhc2guCiAgSXNzdWU6IENPTVBSRVNTLTM1Ni4gVGhhbmtzIHRvIEplcmVteSBHdXN0aWUuCgpDaGFuZ2VzCi0tLS0tLS0KKiBVcGRhdGUgcmVxdWlyZW1lbnQgZnJvbSBKYXZhIDUgdG8gNi4KICBJc3N1ZTogQ09NUFJFU1MtMzQ5LgoqIFRhckFyY2hpdmVFbnRyeSB3YXN0ZWZ1bGx5IGFsbG9jYXRlcyBlbXB0eSBhcnJheXMuCiAgSXNzdWU6IENPTVBSRVNTLTM1MC4KKiBKYXZhZG9jIGZvciBCWmlwMkNvbXByZXNzb3JJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSwgYm9vbGVhbikgc2hvdWxkCiAgcmVmZXIgdG8gSU9FeCwgbm90IE5QRS4KICBJc3N1ZTogQ09NUFJFU1MtMzUzLgoqIFB1cmVKYXZhQ3JjMzJDIGluIHRoZSBzbmFwcHkgcGFja2FnZSBpcyBub3cgZmluYWwgc28gaXQgaXMgbm93IHNhZmUKICB0byBjYWxsIGEgdmlydHVhbCBtZXRob2QgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci4KICBJc3N1ZTogQ09NUFJFU1MtMzU0LgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBhbmQgQ3Bpb0FyY2hpdmVJbnB1dFN0cmVhbSBjb3VsZCB0aHJvdwogIGV4Y2VwdGlvbnMgd2hvJ3MgbWVzc2FnZXMgY29udGFpbmVkIHBvdGVudGlhbGx5IGNvcnJ1cHQgZW50cnkgbmFtZXMKICByZWFkIGZyb20gYSBicm9rZW4gYXJjaGl2ZS4gVGhleSB3aWxsIG5vdyBzYW5pdGl6ZSB0aGUgbmFtZXMgYnkKICByZXBsYWNpbmcgdW5wcmludGFibGUgY2hhcmFjdGVycyBhbmQgcmVzdHJpY3RpbmcgdGhlIGxlbmd0aCB0byAyNTUKICBjaGFyYWN0ZXJzLgogIElzc3VlOiBDT01QUkVTUy0zNTEuCiogQlppcDJDb21wcmVzc29yT3V0cHV0U3RyZWFtIG5vIGxvbmdlciB0cmllcyB0byBmaW5pc2ggdGhlIG91dHB1dAogIHN0cmVhbSBpbiBmaW5hbGl6ZS4gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgY29kZSB0aGF0IHJlbGllZAogIG9uIHRoZSBmaW5hbGl6ZXIuCiAgSXNzdWU6IENPTVBSRVNTLTM1Ny4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMTEKLS0tLS0tLS0tLS0tCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogVGFyQXJjaGl2ZUlucHV0U3RyZWFtIG5vdyBzdXBwb3J0cyByZWFkaW5nIGdsb2JhbCBQQVggaGVhZGVycy4KICBJc3N1ZTogQ09NUFJFU1MtMzQ3LgoqIFRoZSBQQVggaGVhZGVycyBmb3Igc3BhcnNlIGVudHJpZXMgd3JpdHRlbiBieSBzdGFyIGFyZSBub3cKICBhcHBsaWVkLgogIElzc3VlOiBDT01QUkVTUy0zNDYuCiogR05VIHNwYXJzZSBmaWxlcyB1c2luZyBvbmUgb2YgdGhlIFBBWCBmb3JtYXRzIGFyZSBub3cKICBkZXRlY3RlZCwgYnV0IGNhbm5vdCBiZSBleHRyYWN0ZWQuCiAgSXNzdWU6IENPTVBSRVNTLTM0NS4KKiBOZXcgbWV0aG9kIFNldmVuWkZpbGUuZ2V0RW50cmllcyBjYW4gYmUgdXNlZCB0byBsaXN0IHRoZQogIGNvbnRlbnRzIG9mIGEgN3ogYXJjaGl2ZS4KICBJc3N1ZTogQ09NUFJFU1MtMzQxLgoqIFdoZW4gdXNpbmcgWmlwNjRNb2RlLkFsd2F5cyBhbHNvIHVzZSBaSVA2NCBleHRlbnNpb25zIGluc2lkZQogIHRoZSBjZW50cmFsIGRpcmVjdG9yeS4KICBHaXRIdWIgUHVsbCBSZXF1ZXN0ICMxMCBUaGFua3MgdG8gTWF0dCBIb3ZleS4KKiBaaXBGaWxlLmdldFJhd0lucHV0U3RyZWFtKCkgaXMgbm93IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkKICBJc3N1ZTogQ09NUFJFU1MtMzIzLgoqIEFsbG93IGJ5dGUtZm9yLWJ5dGUgcmVwbGljYXRpb24gb2YgWmlwIGVudHJpZXMuCiAgR2l0SHViIFB1bGwgUmVxdWVzdCAjNi4gVGhhbmtzIHRvIEphc29uIHZhbiBaeWwuCiogVGFyQXJjaGl2ZUVudHJ5J3MgcHJlc2VydmVMZWFkaW5nU2xhc2hlcyBpcyBub3cgYSBwcm9wZXJ0eSBhbmQgdXNlZAogIG9uIGxhdGVyIGNhbGxzIHRvIHNldE5hbWUsIHRvby4KICBUaGlzIGJlaGF2aW9yIGlzIGEgYnJlYWtpbmcgY2hhbmdlLgogIElzc3VlOiBDT01QUkVTUy0zMjguCiogQWRkZWQgcmVhZC1vbmx5IHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzaW9uIHVzZWQgaW5zaWRlIG9mCiAgWklQIGFyY2hpdmVzLgogIEdpdEh1YiBQdWxsIFJlcXVlc3QgIzQuIFRoYW5rcyB0byBTw7ZyZW4gR2xpbW0uCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBBckFyY2hpdmVJbnB1dFN0cmVhbSBjYW4gbm93IHJlYWQgR05VIGV4dGVuZGVkIG5hbWVzIHRoYXQgYXJlCiAgdGVybWluYXRlZCB3aXRoIGEgTlVMIGJ5dGUgcmF0aGVyIHRoYW4gYSBsaW5lZmVlZC4KICBJc3N1ZTogQ09NUFJFU1MtMzQ0LgoqIE5hdGl2ZSBNZW1vcnkgTGVhayBpbiBTZXZlbnotRGVmbGF0ZURlY29kZXIuCiAgSXNzdWU6IENPTVBSRVNTLTM0My4gVGhhbmtzIHRvIFJlbmUgUHJlaXNzZWwuCiogU2V2ZW5aRmlsZSB3aWxsIG5vdyBvbmx5IHRyeSB0byBkcmFpbiBhbiBlbnRyeSdzIGNvbnRlbnQgd2hlbgogIG1vdmluZyBvbiB0byB0aGUgbmV4dCBlbnRyeSBpZiBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgbmV4dAogIGVudHJ5LiBUaGlzIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgdGhhdAogIHRyeSB0byBza2lwIG92ZXIgZW50cmllcy4KICBJc3N1ZTogQ09NUFJFU1MtMzQwLiBUaGFua3MgdG8gRGF3aWQgV2Vpc3MuCiogZmlsZSBuYW1lcyBvZiB0YXIgYXJjaGl2ZXMgdXNpbmcgdGhlIHhzdGFyIGZvcm1hdCBhcmUgbm93CiAgcGFyc2VkIHByb3Blcmx5LgogIElzc3VlOiBDT01QUkVTUy0zMzYuCiogY2hlY2tzdW1zIG9mIHRhcnMgdGhhdCBwYWQgdGhlIGNoZWNrc3VtIGZpZWxkIHRvIHRoZSBsZWZ0IGFyZQogIG5vdyBjYWxjdWxhdGVkIHByb3Blcmx5LgogIElzc3VlOiBDT01QUkVTUy0zMzUuCiogQXJBcmNoaXZlSW5wdXRTdHJlYW0gZmFpbGVkIHRvIHJlYWQgcGFzdCB0aGUgZmlyc3QgZW50cnkgd2hlbgogIEJTRCBsb25nIG5hbWVzIGhhdmUgYmVlbiB1c2VkLgogIElzc3VlOiBDT01QUkVTUy0zMzQuIFRoYW5rcyB0byBKZXJlbXkgR3VzdGllLgoqIEFkZGVkIGJ1ZmZlcmluZyBmb3IgcmFuZG9tIGFjY2VzcyB3aGljaCBzcGVlZHMgdXAgN1ogc3VwcG9ydC4KICBJc3N1ZTogQ09NUFJFU1MtMzMzLiBUaGFua3MgdG8gRGF3aWQgV2Vpc3MuCiogVGhlIGNoZWNrc3VtIHZhbGlkYXRpb24gb2YgVGFyYXJjaGl2ZUVudHJ5IGlzIG5vdyBhcyBzdHJpY3QgYXMKICB0aGUgdmFsaWRhdGlvbiBvZiBHTlUgdGFyLCB3aGljaCBlbGltaW5hdGVzIGEgZmV3IGNhc2VzIG9mCiAgZmFsc2UgcG9zaXRpdmVzIG9mIEFyY2hpdmVTdHJlYW1GYWN0b3J5LgogIFRoaXMgYmVoYXZpb3IgaXMgYSBicmVha2luZyBjaGFuZ2Ugc2luY2UgdGhlIGNoZWNrIGhhcyBiZWNvbWUKICBtb3JlIHN0cmljdCBidXQgYW55IGFyY2hpdmUgdGhhdCBmYWlscyB0aGUgY2hlY2tzdW0gdGVzdCBub3cKICB3b3VsZCBhbHNvIGZhaWwgaXQgd2hlbiBleHRyYWN0ZWQgd2l0aCBvdGhlciB0b29scyBhbmQgbXVzdCBiZQogIGNvbnNpZGVyZWQgYW4gaW52YWxpZCBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy0zMzEuCiogU25hcHB5Q29tcHJlc3NvcklucHV0U3RyZWFtIGFuZAogIEZyYW1lZFNuYXBweUNvbXByZXNzb3JJbnB1dFN0cmVhbSByZXR1cm5lZCAwIGF0IHRoZSBlbmQgb2YgdGhlCiAgc3RyZWFtIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KICBJc3N1ZTogQ09NUFJFU1MtMzMyLgoqIEFkanVzdGVkIHVuaXQgdGVzdCB0byB1cGRhdGVzIGluIEphdmE4IGFuZCBsYXRlciB0aGF0IGNoYW5nZQogIHRoZSBsb2dpYyBvZiBaaXBFbnRyeSNnZXRUaW1lLgogIElzc3VlOiBDT01QUkVTUy0zMjYuCiogVGFyQXJjaGl2ZU91dHB1dFN0cmVhbSB3aWxsIG5vdyByZWNvZ25pemUgR05VIGxvbmcgbmFtZSBhbmQKICBsaW5rIGVudHJpZXMgZXZlbiBpZiB0aGUgc3BlY2lhbCBlbnRyeSBoYXMgYSBkaWZmZXJlbnQgbmFtZQogIHRoYW4gR05VIHRhciB1c2VzIGl0c2VsZi4gIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNhc2UgZm9yCiAgYXJjaGl2ZXMgY3JlYXRlZCBieSBzdGFyLgogIElzc3VlOiBDT01QUkVTUy0zMjQuCiogQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gSW5mb1pJUCB0eXBlIDc4NzUgZXh0cmEKICBmaWVsZHMgYXJlIHJlYWQgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkuCiAgSXNzdWU6IENPTVBSRVNTLTMyMS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMTAKLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMTAgbW92ZXMgdGhlIGZvcm1lcgpvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuei5faW50ZXJuYWxfIHBhY2thZ2Ugd2hpY2gKYnJlYWtzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBjb2RlIHdoaWNoIHVzZWQgdGhlIG9sZCBwYWNrYWdlLgoKVGhpcyBhbHNvIGNoYW5nZXMgdGhlIHN1cGVyY2xhc3Mgb2YgWkNvbXByZXNzb3JJbnB1dFN0cmVhbSB3aGljaCBtYWtlcwp0aGlzIGNsYXNzIGJpbmFyeSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lIG9mIENvbXByZXNzIDEuOS4gIENvZGUKdGhhdCBleHRlbmRzIFpDb21wcmVzc29ySW5wdXRTdHJlYW0gd2lsbCBuZWVkIHRvIGJlIHJlY29tcGlsZWQgaW4Kb3JkZXIgdG8gd29yayB3aXRoIENvbXByZXNzIDEuMTAuCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkgY2FuIG5vdyBhdXRvLWRldGVjdCBERUZMQVRFIHN0cmVhbXMKICB3aXRoIFpMSUIgaGVhZGVyLgogIElzc3VlOiBDT01QUkVTUy0zMTYuIFRoYW5rcyB0byBOaWNrIEJ1cmNoLgoqIENvbXByZXNzb3JTdHJlYW1GYWN0b3J5IGNhbiBub3cgYXV0by1kZXRlY3QgTFpNQSBzdHJlYW1zLgogIElzc3VlOiBDT01QUkVTUy0zMTMuCiogQWRkZWQgc3VwcG9ydCBmb3IgcGFyYWxsZWwgY29tcHJlc3Npb24uIFRoaXMgbG93LWxldmVsIEFQSSBhbGxvd3MKICBhIGNsaWVudCB0byBidWlsZCBhIHppcC9qYXIgZmlsZSBieSB1c2luZyB0aGUgY2xhc3MKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuYXJjaGl2ZXJzLnppcC5QYXJhbGxlbFNjYXR0ZXJaaXBDcmVhdG9yLgoKICBaaXAgZG9jdW1lbnRhdGlvbiB1cGRhdGVkIHdpdGggZnVydGhlciBub3RlcyBhYm91dCBwYXJhbGxlbCBmZWF0dXJlcy4KCiAgUGxlYXNlIG5vdGUgdGhhdCBzb21lIGFzcGVjdHMgb2YgamFyIGNyZWF0aW9uIG5lZWQgdG8gYmUKICBoYW5kbGVkIGJ5IGNsaWVudCBjb2RlIGFuZCBpcyBub3QgcGFydCBvZiBjb21tb25zLWNvbXByZXNzIGZvciB0aGlzCiAgcmVsZWFzZS4KICBJc3N1ZTogQ09NUFJFU1MtMjk2LiBUaGFua3MgdG8gS3Jpc3RpYW4gUm9zZW52b2xkLgoqIEN1dCBvdmVyYWxsIG9iamVjdCBpbnN0YW50aWF0aW9uIGluIGhhbGYgYnkgY2hhbmdpbmcgZmlsZQogIGhlYWRlciBnZW5lcmF0aW9uIGFsZ29yaXRobSwgZm9yIGEgMTAtMTUgcGVyY2VudCBwZXJmb3JtYW5jZQogIGltcHJvdmVtZW50LgoKICBBbHNvIGV4dHJhY3RlZCB0d28gcHJpdmF0ZSBtZXRob2RzIGNyZWF0ZUxvY2FsRmlsZUhlYWRlcgogIGFuZCBjcmVhdGVDZW50cmFsRmlsZUhlYWRlciBpbiBaaXBBcmNoaXZlT3V0cHV0U3RyZWFtLgogIFRoZXNlIG1heSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgYWRkaXRpb25hbCB1c2FnZXMgaW4gdGhlCiAgbmVhciBmdXR1cmUuIFRoYW5rcyB0byBLcmlzdGlhbiBSb3NlbnZvbGQuCiogTmV3IG1ldGhvZHMgaW4gWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSBhbmQgWmlwRmlsZSBhbGxvd3MKICBlbnRyaWVzIHRvIGJlIGNvcGllZCBmcm9tIG9uZSBhcmNoaXZlIHRvIGFub3RoZXIgd2l0aG91dAogIGhhdmluZyB0byByZS1jb21wcmVzcyB0aGVtLgogIElzc3VlOiBDT01QUkVTUy0yOTUuIFRoYW5rcyB0byBLcmlzdGlhbiBSb3NlbnZvbGQuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gY2FuIG5vdyByZWFkIGVudHJpZXMgd2l0aCBncm91cCBvcgogIHVzZXIgaWRzID4gMHg4MDAwMDAwMC4KICBJc3N1ZTogQ09NUFJFU1MtMzE0LgoqIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0gY2FuIG5vdyB3cml0ZSBlbnRyaWVzIHdpdGggZ3JvdXAgb3IKICB1c2VyIGlkcyA+IDB4ODAwMDAwMDAuCiAgSXNzdWU6IENPTVBSRVNTLTMxNS4KKiBUYXJBcmNoaXZlRW50cnkncyBjb25zdHJ1Y3RvciB3aXRoIGEgRmlsZSBhbmQgYSBTdHJpbmcgYXJnCiAgZGlkbid0IG5vcm1hbGl6ZSB0aGUgbmFtZS4KICBJc3N1ZTogQ09NUFJFU1MtMzEyLgoqIFppcEVuY29kaW5nSGVscGVyIG5vIGxvbmdlciByZWFkcyBzeXN0ZW0gcHJvcGVydGllcyBkaXJlY3RseQogIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBjaGFyc2V0LgogIElzc3VlOiBDT01QUkVTUy0zMDguCiogQlppcDJDb21wcmVzc29ySW5wdXRTdHJlYW0jcmVhZCB3b3VsZCByZXR1cm4gLTEgd2hlbiBhc2tlZCB0bwogIHJlYWQgMCBieXRlcy4KICBJc3N1ZTogQ09NUFJFU1MtMzA5LgoqIEFyY2hpdmVTdHJlYW1GYWN0b3J5IGZhaWxzIHRvIHBhc3Mgb24gdGhlIGVuY29kaW5nIHdoZW4gY3JlYXRpbmcKICBzb21lIHN0cmVhbXMuCiAgICAqIEFyakFyY2hpdmVJbnB1dFN0cmVhbQogICAgKiBDcGlvQXJjaGl2ZUlucHV0U3RyZWFtCiAgICAqIER1bXBBcmNoaXZlSW5wdXRTdHJlYW0KICAgICogSmFyQXJjaGl2ZUlucHV0U3RyZWFtCiAgICAqIFRhckFyY2hpdmVJbnB1dFN0cmVhbQogICAgKiBKYXJBcmNoaXZlT3V0cHV0U3RyZWFtCiAgSXNzdWU6IENPTVBSRVNTLTMwNi4KKiBSZXN0b3JlIGltbXV0YWJpbGl0eS90aHJlYWQtc2FmZXR5IHRvIEFyY2hpdmVTdHJlYW1GYWN0b3J5LgogIFRoZSBjbGFzcyBpcyBub3cgaW1tdXRhYmxlIHByb3ZpZGVkIHRoYXQgdGhlIG1ldGhvZCBzZXRFbnRyeUVuY29kaW5nCiAgaXMgbm90IHVzZWQuIFRoZSBjbGFzcyBpcyB0aHJlYWQtc2FmZS4KICBJc3N1ZTogQ09NUFJFU1MtMzAyLgoqIFJlc3RvcmUgaW1tdXRhYmlsaXR5L3RocmVhZC1zYWZldHkgdG8gQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkuCiAgVGhlIGNsYXNzIGlzIG5vdyBpbW11dGFibGUgcHJvdmlkZWQgdGhhdCB0aGUgbWV0aG9kCiAgc2V0RGVjb21wcmVzc0NvbmNhdGVuYXRlZCBpcyBub3QgdXNlZC4gIFRoZSBjbGFzcyBpcyB0aHJlYWQtc2FmZS4KICBJc3N1ZTogQ09NUFJFU1MtMzAzLgoqIFppcEZpbGUgbG9ncyBhIHdhcm5pbmcgaW4gaXRzIGZpbmFsaXplciB3aGVuIGl0cyBjb25zdHJ1Y3RvcgogIGhhcyB0aHJvd24gYW4gZXhjZXB0aW9uIHJlYWRpbmcgdGhlIGZpbGUgLSBmb3IgZXhhbXBsZSBpZiB0aGUKICBmaWxlIGRvZXNuJ3QgZXhpc3QuCiAgSXNzdWU6IENPTVBSRVNTLTI5Ny4KKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIHdoZW4gdGFyIGVuY291bnRlcnMgYSBncm91cElkIHRoYXQgaXMKICB0b28gYmlnIHRvIHdyaXRlIHdpdGhvdXQgdXNpbmcgdGhlIFNUQVIgb3IgUE9TSVggZm9ybWF0LgogIElzc3VlOiBDT01QUkVTUy0yOTAuIFRoYW5rcyB0byBLcmlzdGlhbiBSb3NlbnZvbGQuCiogU2V2ZW5aRmlsZSBub3cgdGhyb3dzIHRoZSBzcGVjaWZpYyBQYXNzd29yZFJlcXVpcmVkRXhjZXB0aW9uCiAgd2hlbiBpdCBlbmNvdW50ZXJzIGFuIGVuY3J5cHRlZCBzdHJlYW0gYnV0IG5vIHBhc3N3b3JkIGhhcwogIGJlZW4gc3BlY2lmaWVkLgogIElzc3VlOiBDT01QUkVTUy0yOTguCgpDaGFuZ2VzCi0tLS0tLS0KKiBNb3ZlZCB0aGUgcGFja2FnZQogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy56Ll9pbnRlcm5hbF8gdG8KICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMubHp3IGFuZCBtYWRlIGl0IHBhcnQKICBvZiB0aGUgQVBJIHRoYXQgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuICBUaGlzIHdpbGwgYnJlYWsKICBleGlzdGluZyBjb2RlIHRoYXQgdXNlcyB0aGUgb2xkIHBhY2thZ2UuIFRoYW5rcyB0byBEYW1qYW4gSm92YW5vdmljLgoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIENvbXByZXNzLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zCm9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsIHBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwKc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBDb21wcmVzcyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvY29tcHJlc3MvCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjkKLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBBZGRlZCBzdXBwb3J0IGZvciBERUZMQVRFIHN0cmVhbXMgd2l0aG91dCBhbnkgZ3ppcCBmcmFtaW5nLgogIElzc3VlOiBDT01QUkVTUy0yNjMuCiAgVGhhbmtzIHRvIE1hdHRoaWFzIFN0ZXZlbnMuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBXaGVuIHJlYWRpbmcgN3ogZmlsZXMgdW5rbm93biBmaWxlIHByb3BlcnRpZXMgYW5kIHByb3BlcnRpZXMgb2YgdHlwZQogIGtEdW1teSBhcmUgbm93IGlnbm9yZWQuCiAgSXNzdWU6IENPTVBSRVNTLTI4Ny4KKiBFeHBhbmRpbmcgN3ogYXJjaGl2ZXMgdXNpbmcgTFpNQSBjb21wcmVzc2lvbiBjb3VsZCBjYXVzZSBhbgogIEVPRkV4Y2VwdGlvbi4KICBJc3N1ZTogQ09NUFJFU1MtMjg2LiAKKiBMb25nLU5hbWUgYW5kIC1saW5rIG9yIFBBWC1oZWFkZXIgZW50cmllcyBpbiBUQVIgYXJjaGl2ZXMgYWx3YXlzIGhhZAogIHRoZSBjdXJyZW50IHRpbWUgYXMgbGFzdCBtb2RmaWNhdGlvbiB0aW1lLCBjcmVhdGluZyBhcmNoaXZlcyB0aGF0CiAgYXJlIGRpZmZlcmVudCBhdCB0aGUgYnl0ZSBsZXZlbCBlYWNoIHRpbWUgYW4gYXJjaGl2ZSB3YXMgYnVpbHQuCiAgSXNzdWU6IENPTVBSRVNTLTI4OS4KICBUaGFua3MgdG8gQm9iIFJvYmVydHNvbi4KCkNoYW5nZXMKLS0tLS0tLQoqIENoZWNraW5nIGZvciBYWiBmb3IgSmF2YSBtYXkgYmUgZXhwZW5zaXZlLiAgVGhlIHJlc3VsdCB3aWxsIG5vdyBiZQogIGNhY2hlZCBvdXRzaWRlIG9mIGFuIE9TR2kgZW52aXJvbm1lbnQuICBZb3UgY2FuIHVzZSB0aGUgbmV3CiAgWFpVdGlscyNzZXRDYWNoZVhaQXZhaWxhYmlsaXR5IHRvIG92ZXJycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IuCiAgSXNzdWU6IENPTVBSRVNTLTI4NS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuOC4xCi0tLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBDT01QUkVTUy0yNzI6ICBDb21wcmVzc29yU3RyZWFtRmFjdG9yeSBjYW4gbm93IGF1dG8tZGV0ZWN0IFVuaXggY29tcHJlc3MKICAgICAgICAgICAgICAgICAoIi5aIikgc3RyZWFtcy4gCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBDT01QUkVTUy0yNzA6ICBUaGUgc25hcHB5LCBhciBhbmQgdGFyIGlucHV0c3RyZWFtcyBtaWdodCBmYWlsIHRvIHJlYWQgZnJvbSBhCiAgICAgICAgICAgICAgICAgbm9uLWJ1ZmZlcmVkIHN0cmVhbSBpbiBjZXJ0YWluIGNhc2VzLiAKKiBDT01QUkVTUy0yNzc6ICBJT1V0aWxzI3NraXAgbWlnaHQgc2tpcCBmZXdlciBieXRlcyB0aGFuIHJlcXVlc3RlZCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgIG1vcmUgY291bGQgYmUgcmVhZCBmcm9tIHRoZSBzdHJlYW0uIAoqIENPTVBSRVNTLTI3NjogIEFyY2hpdmVTdHJlYW1zIG5vdyB2YWxpZGF0ZSB0aGVyZSBpcyBhIGN1cnJlbnQgZW50cnkgYmVmb3JlCiAgICAgICAgICAgICAgICAgcmVhZGluZyBvciB3cml0aW5nIGVudHJ5IGRhdGEuIAoqIEFyakFyY2hpdmVJbnB1dFN0cmVhbSNjYW5SZWFkRW50cnlEYXRhIHRlc3RlZCB0aGUgY3VycmVudAogICAgICAgICAgICAgICAgIGVudHJ5IG9mIHRoZSBzdHJlYW0gcmF0aGVyIHRoYW4gaXRzIGFyZ3VtZW50LiAKKiBDT01QUkVTUy0yNzQ6ICBDaGFuZ2VTZXQjZGVsZXRlIGFuZCBkZWxldGVEaXIgbm93IHByb3Blcmx5IGRlYWwgd2l0aCB1bm5hbWVkCiAgICAgICAgICAgICAgICAgZW50cmllcy4gCiogQ09NUFJFU1MtMjczOiAgQWRkZWQgYSBmZXcgbnVsbCBjaGVja3MgdG8gaW1wcm92ZSByb2J1c3RuZXNzLiAKKiBDT01QUkVTUy0yNzg6ICBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gZmFpbGVkIHRvIHJlYWQgYXJjaGl2ZXMgd2l0aCBlbXB0eQogICAgICAgICAgICAgICAgIGdpZC91aWQgZmllbGRzLiAKKiBDT01QUkVTUy0yNzk6ICBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gbm93IGFnYWluIHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBpdAogICAgICAgICAgICAgICAgIGVuY291bnRlcnMgYSB0cnVuY2F0ZWQgYXJjaGl2ZSB3aGlsZSByZWFkaW5nIGZyb20gdGhlIGxhc3QKICAgICAgICAgICAgICAgICBlbnRyeS4gCiogQ09NUFJFU1MtMjgwOiAgQWRhcHRlZCBUYXJBcmNoaXZlSW5wdXRTdHJlYW0jc2tpcCB0byB0aGUgbW9kaWZpZWQKICAgICAgICAgICAgICAgICBJT1V0aWxzI3NraXAgbWV0aG9kLiBUaGFua3MgdG8gQkVMVUdBIEJFSFIuIAoKQ2hhbmdlcwotLS0tLS0tCiogVGhlIGRlcGVuZGVuY3kgb24gb3JnLnR1a2Fhbmk6eHogaXMgbm93IG1hcmtlZCBhcyBvcHRpb25hbC4gCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjgKLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBHemlwQ29tcHJlc3NvcklucHV0U3RyZWFtIG5vdyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHNhbWUKICBtZXRhZGF0YSB0aGF0IGNhbiBiZSBwcm92aWRlZCB2aWEgR3ppcFBhcmFtZXRlcnMgd2hlbiB3cml0aW5nCiAgYSBnemlwIHN0cmVhbS4KICBJc3N1ZTogQ09NUFJFU1MtMjYwLiAKKiBTZXZlblpPdXRwdXRGaWxlIG5vdyBzdXBwb3J0cyBjaGFpbmluZyBtdWx0aXBsZQogIGNvbXByZXNzaW9uL2VuY3J5cHRpb24vZmlsdGVyIG1ldGhvZHMgYW5kIHBhc3Npbmcgb3B0aW9ucyB0bwogIHRoZSBtZXRob2RzLgogIElzc3VlOiBDT01QUkVTUy0yNjYuIAoqIFRoZSAoY29tcHJlc3Npb24pIG1ldGhvZChzKSBjYW4gbm93IGJlIHNwZWNpZmllZCBwZXIgZW50cnkgaW4KICBTZXZlblpPdXRwdXRGaWxlLgogIElzc3VlOiBDT01QUkVTUy0yNjEuIAoqIFNldmVuWkFyY2hpdmVFbnRyeSAia25vd3MiIHdoaWNoIG1ldGhvZChzKSBoYXZlIGJlZW4gdXNlZCB0bwogIHdyaXRlIGl0IHRvIHRoZSBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy0yNTguIAoqIFRoZSA3eiBwYWNrYWdlIG5vdyBzdXBwb3J0cyB0aGUgZGVsdGEgZmlsdGVyIGFzIG1ldGhvZC4gCiogVGhlIDd6IHBhY2thZ2Ugbm93IHN1cHBvcnRzIEJDSiBmaWx0ZXJzIGZvciBzZXZlcmFsIHBsYXRmb3Jtcy4KICBZb3Ugd2lsbCBuZWVkIGEgdmVyc2lvbiA+PSAxLjUgb2YgWFogZm9yIEphdmEgdG8gcmVhZCBhcmNoaXZlcwogIHVzaW5nIEJDSiwgdGhvdWdoLgogIElzc3VlOiBDT01QUkVTUy0yNTcuIAoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogQlppcDJDb21wcmVzc29ySW5wdXRTdHJlYW0gcmVhZCBmZXdlciBieXRlcyB0aGFuIHBvc3NpYmxlIGZyb20KICBhIHRydW5jYXRlZCBzdHJlYW0uCiAgSXNzdWU6IENPTVBSRVNTLTI1My4gCiogU2V2ZW5aRmlsZSBmYWlsZWQgY2xhaW1pbmcgdGhlIGRpY3Rpb25hcnkgd2FzIHRvbyBsYXJnZSB3aGVuCiAgYXJjaGl2ZXMgdXNlZCBMWk1BIGNvbXByZXNzaW9uIGZvciBoZWFkZXJzIGFuZCBjb250ZW50IGFuZAogIGNlcnRhaW4gbm9uLWRlZmF1bHQgZGljdGlvbmFyeSBzaXplcy4KICBJc3N1ZTogQ09NUFJFU1MtMjUzLiAKKiBDb21wcmVzc29yU3RyZWFtRmFjdG9yeS5jcmVhdGVDb21wcmVzc29ySW5wdXRTdHJlYW0gd2l0aAogIGV4cGxpY2l0IGNvbXByZXNzaW9uIGRpZCBub3QgaG9ub3IgZGVjb21wcmVzc0NvbmNhdGVuYXRlZAogIElzc3VlOiBDT01QUkVTUy0yNTkuIAoqIFRhckFyY2hpdmVJbnB1dFN0cmVhbSB3aWxsIG5vdyByZWFkIGFyY2hpdmVzIGNyZWF0ZWQgYnkgdGFyCiAgaW1wbGVtZW50YXRpb25zIHRoYXQgZW5jb2RlIGJpZyBudW1iZXJzIGJ5IG5vdCBhZGRpbmcgYQogIHRyYWlsaW5nIE5VTC4KICBJc3N1ZTogQ09NUFJFU1MtMjYyLiAKKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gd291bGQgcmV0dXJuIE5VTCBieXRlcyBmb3IgdGhlIGZpcnN0IDUxMgogIGJ5dGVzIG9mIGEgU1RPUkVEIGVudHJ5IGlmIGl0IHdhcyB0aGUgdmVyeSBmaXJzdCBlbnRyeSBvZiB0aGUKICBhcmNoaXZlLgogIElzc3VlOiBDT01QUkVTUy0yNjQuIAoqIFdoZW4gd3JpdGluZyBQQVgvUE9TSVggaGVhZGVycyBmb3IgVEFSIGVudHJpZXMgd2l0aAogIGJhY2tzbGFzaGVzIG9yIGNlcnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gdGhlaXIgbmFtZQogIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0gY291bGQgZmFpbC4KICBJc3N1ZTogQ09NUFJFU1MtMjY1LiAKKiBBcmNoaXZlU3RyZWFtRmFjdG9yeSBub3cgdGhyb3dzIGEgU3RyZWFtaW5nTm90U3VwcG9ydGVkIC0gYQogIG5ldyBzdWJjbGFzcyBvZiBBcmNoaXZlRXhjZXB0aW9uIC0gaWYgaXQgaXMgYXNrZWQgdG8gcmVhZCBmcm9tCiAgb3Igd3JpdGUgdG8gYSBzdHJlYW0gYW5kIENvbW1vbnMgQ29tcHJlc3MgZG9lc24ndCBzdXBwb3J0CiAgc3RyZWFtaW5nIGZvciB0aGUgZm9ybWF0LiAgVGhpcyBjdXJyZW50bHkgb25seSBhcHBsaWVzIHRvIHRoZQogIDd6IGZvcm1hdC4KICBJc3N1ZTogQ09NUFJFU1MtMjY3LiAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuNwotLS0tLS0tLS0tLQoKTmV3IGZlYXR1cmVzCi0tLS0tLS0tLS0tLQoqIFJlYWQtT25seSBzdXBwb3J0IGZvciBTbmFwcHkgY29tcHJlc3Npb24uCiAgSXNzdWU6IENPTVBSRVNTLTE0Ny4gVGhhbmtzIHRvIEJFTFVHQSBCRUhSLgoqIFJlYWQtT25seSBzdXBwb3J0IGZvciAuWiBjb21wcmVzc2VkIGZpbGVzLgogIElzc3VlOiBDT01QUkVTUy0yNDMuIFRoYW5rcyB0byBEYW1qYW4gSm92YW5vdmljLgoqIFppcEZpbGUgYW5kIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBub3cgc3VwcG9ydCByZWFkaW5nIGVudHJpZXMKICBjb21wcmVzc2VkIHVzaW5nIHRoZSBTSFJJTktJTkcgbWV0aG9kLiBUaGFua3MgdG8gRGFtamFuIEpvdmFub3ZpYy4KKiBHemlwQ29tcHJlc3Nvck91dHB1dFN0cmVhbSBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgY29tcHJlc3Npb24KICBsZXZlbCBhbmQgdGhlIGhlYWRlciBtZXRhZGF0YSAoZmlsZW5hbWUsIGNvbW1lbnQsIG1vZGlmaWNhdGlvbiB0aW1lLAogIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGV4dHJhIGZsYWdzKQogIElzc3VlOiBDT01QUkVTUy0yNTAuIFRoYW5rcyB0byBFbW1hbnVlbCBCb3VyZy4KKiBaaXBGaWxlIGFuZCBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gbm93IHN1cHBvcnQgcmVhZGluZyBlbnRyaWVzCiAgY29tcHJlc3NlZCB1c2luZyB0aGUgSU1QTE9ERSBtZXRob2QuCiAgSXNzdWU6IENPTVBSRVNTLTExNS4gVGhhbmtzIHRvIEVtbWFudWVsIEJvdXJnLgoqIFppcEZpbGUgYW5kIHRoZSA3eiBmaWxlIGNsYXNzZXMgbm93IGltcGxlbWVudCBDbG9zZWFibGUgYW5kIGNhbiBiZQogIHVzZWQgaW4gdHJ5LXdpdGgtcmVzb3VyY2VzIGNvbnN0cnVjdHMuCgpGaXhlZCBCdWdzCi0tLS0tLS0tLS0KKiBTZXZlblpPdXRwdXRGaWxlI2Nsb3NlQXJjaGl2ZUVudHJ5IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiB1c2luZwogIExaTUEyIGNvbXByZXNzaW9uIG9uIEphdmE4LiAgSXNzdWU6IENPTVBSRVNTLTI0MS4KKiA3eiByZWFkaW5nIG9mIGJpZyA2NGJpdCB2YWx1ZXMgY291bGQgYmUgd3JvbmcuCiAgSXNzdWU6IENPTVBSRVNTLTI0NC4gVGhhbmtzIHRvIE5pY28gS3J1YmVyLgoqIFRhckFyY2hpdmVJbnB1dFN0cmVhbSBjb3VsZCBmYWlsIHRvIHJlYWQgYW4gYXJjaGl2ZSBjb21wbGV0ZWx5LgogIElzc3VlOiBDT01QUkVTUy0yNDUuCiogVGhlIHRpbWUtc2V0dGVycyBpbiBYNTQ1NV9FeHRlbmRlZFRpbWVzdGFtcCBub3cgc2V0IHRoZQogIGNvcnJlc3BvbmRpbmcgZmxhZ3MgZXhwbGljaXRseSAtIGkuZS4gdGhleSBzZXQgdGhlIGJpdCBpZiB0aGUgdmFsdXMKICBpcyBub3QtbnVsbCBhbmQgcmVzZXQgaXQgb3RoZXJ3aXNlLiAgVGhpcyBtYXkgY2F1c2UKICBpbmNvbXBhdGliaWxpdGllcyBpZiB5b3UgdXNlIHNldEZsYWdzIHRvIHVuc2V0IGEgYml0IGFuZCBsYXRlciBzZXQKICB0aGUgdGltZSB0byBhIG5vbi1udWxsIHZhbHVlIC0gdGhlIGZsYWcgd2lsbCBub3cgYmUgc2V0LgogIElzc3VlOiBDT01QUkVTUy0yNDIuCiogU2V2ZW5aT3V0cHV0RmlsZSB3b3VsZCBjcmVhdGUgaW52YWxpZCBhcmNoaXZlcyBpZiBtb3JlIHRoYW4gc2l4CiAgZW1wdHkgZmlsZXMgb3IgZGlyZWN0b3JpZXMgd2VyZSBpbmNsdWRlZC4gIElzc3VlOiBDT01QUkVTUy0yNTIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjYKLS0tLS0tLS0tLS0KClZlcnNpb24gMS42IGludHJvZHVjZXMgY2hhbmdlcyB0byB0aGUgaW50ZXJuYWwgQVBJIG9mIHRoZSB0YXIgcGFja2FnZSB0aGF0IApicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpbiB0aGUgZm9sbG93aW5nIHJhcmUgY2FzZXMuICBUaGlzIHZlcnNpb24gCnJlbW92ZXMgdGhlIHBhY2thZ2UgcHJpdmF0ZSBUYXJCdWZmZXIgY2xhc3MgYWxvbmcgd2l0aCB0aGUgcHJvdGVjdGVkICJidWZmZXIiIAptZW1iZXJzIGluIFRhckFyY2hpdmVJbnB1dFN0cmVhbSBhbmQgVGFyQXJjaGl2ZU91dHB1dFN0cmVhbS4gIFRoaXMgY2hhbmdlIHdpbGwgCm9ubHkgYWZmZWN0IHlvdSBpZiB5b3UgaGF2ZSBjcmVhdGVkIGEgc3ViY2xhc3Mgb2Ygb25lIG9mIHRoZSBzdHJlYW0gY2xhc3NlcyAKYW5kIGFjY2Vzc2VkIHRoZSBidWZmZXIgbWVtYmVyIG9yIGRpcmVjdGx5IHVzZWQgdGhlIFRhckJ1ZmZlciBjbGFzcy4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogQWRkZWQgc3VwcG9ydCBmb3IgN3ogYXJjaGl2ZXMuICBNb3N0IGNvbXByZXNzaW9uIGFsZ29yaXRobXMKICBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiwgTFpNQSBhbmQgZW5jcnlwdGlvbiBhcmUgb25seQogIHN1cHBvcnRlZCB3aGVuIHJlYWRpbmcuICBJc3N1ZTogQ09NUFJFU1MtNTQuIFRoYW5rcyB0byBEYW1qYW4gSm92YW5vdmljLiAKKiBBZGRlZCByZWFkLW9ubHkgc3VwcG9ydCBmb3IgQVJKIGFyY2hpdmVzIHRoYXQgZG9uJ3QgdXNlCiAgY29tcHJlc3Npb24uICBJc3N1ZTogQ09NUFJFU1MtMjI2LiBUaGFua3MgdG8gRGFtamFuIEpvdmFub3ZpYy4gCiogRHVtcEFyY2hpdmVJbnB1dFN0cmVhbSBub3cgc3VwcG9ydHMgYW4gZW5jb2RpbmcgcGFyYW1ldGVyIHRoYXQKICBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbmNvZGluZyBvZiBmaWxlIG5hbWVzLiAKKiBUaGUgQ1BJTyBzdHJlYW1zIG5vdyBzdXBwb3J0IGFuIGVuY29kaW5nIHBhcmFtZXRlciB0aGF0IGNhbiBiZQogIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5jb2Rpbmcgb2YgZmlsZSBuYW1lcy4gCiogUmVhZC1vbmx5IHN1cHBvcnQgZm9yIExaTUEgc3RhbmRhbG9uZSBjb21wcmVzc2lvbiBoYXMgYmVlbiBhZGRlZC4KICBJc3N1ZTogQ09NUFJFU1MtMTExLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogVGFyQnVmZmVyLnRyeVRvQ29uc3VtZVNlY29uZEVPRlJlY29yZCBjb3VsZCB0aHJvdyBhCiAgTnVsbFBvaW50ZXJFeGNlcHRpb24gIElzc3VlOiBDT01QUkVTUy0yMjMuIFRoYW5rcyB0byBKZXJlbXkgR3VzdGllLiAKKiBQYXJzaW5nIG9mIHppcDY0IGV4dHJhIGZpZWxkcyBoYXMgYmVjb21lIG1vcmUgbGVuaWVudCBpbiBvcmRlcgogIHRvIGJlIGFibGUgdG8gcmVhZCBhcmNoaXZlcyBjcmVhdGVkIGJ5IERvdE5ldFppcCBhbmQgbWF5YmUKICBvdGhlciBhcmNoaXZlcnMgYXMgd2VsbC4gIElzc3VlOiBDT01QUkVTUy0yMjguIAoqIFRBUiB3aWxsIG5vdyBwcm9wZXJseSByZWFkIHRoZSBuYW1lcyBvZiBzeW1ib2xpYyBsaW5rcyB3aXRoCiAgbG9uZyBuYW1lcyB0aGF0IHVzZSB0aGUgR05VIHZhcmlhbnQgdG8gc3BlY2lmeSB0aGUgbG9uZyBmaWxlCiAgbmFtZS4gIElzc3VlOiBDT01QUkVTUy0yMjkuIFRoYW5rcyB0byBDaHJpc3RvcGggR3lzaW4uIAoqIFppcEZpbGUjZ2V0SW5wdXRTdHJlYW0gY291bGQgcmV0dXJuIG51bGwgaWYgdGhlIGFyY2hpdmUKICBjb250YWluZWQgZHVwbGljYXRlIGVudHJpZXMuCiAgVGhlIGNsYXNzIG5vdyBhbHNvIHByb3ZpZGVzIHR3byBuZXcgbWV0aG9kcyB0byBvYnRhaW4gYWxsCiAgZW50cmllcyBvZiBhIGdpdmVuIG5hbWUgcmF0aGVyIHRoYW4ganVzdCB0aGUgZmlyc3Qgb25lLgogIElzc3VlOiBDT01QUkVTUy0yMjcuIAoqIENwaW9BcmNoaXZlSW5wdXRTdHJlYW0gZmFpbGVkIHRvIHJlYWQgYXJjaGl2ZXMgY3JlYXRlZCBieQogIFJlZGxpbmUgUlBNLiAgSXNzdWU6IENPTVBSRVNTLTIzNi4gVGhhbmtzIHRvIEFuZHJldyBEdWZmeS4gCiogVGFyQXJjaGl2ZU91dHB1dFN0cmVhbSBub3cgcHJvcGVybHkgaGFuZGxlcyBsaW5rIG5hbWVzIHRoYXQKICBhcmUgdG9vIGxvbmcgdG8gZml0IGludG8gYSB0cmFkaXRpb25hbCBUQVIgaGVhZGVyLiAgSXNzdWU6CiAgQ09NUFJFU1MtMjM3LiBUaGFua3MgdG8gRW1tYW51ZWwgQm91cmcuCiogVGhlIGF1dG8tZGV0ZWN0aW5nIGNyZWF0ZSpJbnB1dFN0cmVhbSBtZXRob2RzIG9mIEFyY2hpdmUgYW5kCiAgQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkgY291bGQgZmFpbCB0byBkZXRlY3QgdGhlIGZvcm1hdCBvZgogIGJsb2NraW5nIGlucHV0IHN0cmVhbXMuICBJc3N1ZTogQ09NUFJFU1MtMjM5LiAKCkNoYW5nZXMKLS0tLS0tLQoqIFJlYWRhYmlsdHkgcGF0Y2ggdG8gVGFyQXJjaGl2ZUlucHV0U3RyZWFtLiAgSXNzdWU6CiAgQ09NUFJFU1MtMjMyLiBUaGFua3MgdG8gQkVMVUdBIEJFSFIuCiogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHRvIFRhckFyY2hpdmVJbnB1dFN0cmVhbSwgaW4KICBwYXJ0aWN1bGFyIHRvIHRoZSBza2lwIG1ldGhvZC4gIElzc3VlOiBDT01QUkVTUy0yMzQuIFRoYW5rcyB0bwogIEJFTFVHQSBCRUhSLiAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuNQotLS0tLS0tLS0tLQoKTmV3IGZlYXR1cmVzCi0tLS0tLS0tLS0tLQoqIENvbXByZXNzb3JTdHJlYW1GYWN0b3J5IGhhcyBhbiBvcHRpb24gdG8gY3JlYXRlIGRlY29tcHJlc3NpbmcKICBzdHJlYW1zIHRoYXQgZGVjb21wcmVzcyB0aGUgZnVsbCBpbnB1dCBmb3IgZm9ybWF0cyB0aGF0IHN1cHBvcnQKICBtdWx0aXBsZSBjb25jYXRlbmF0ZWQgc3RyZWFtcy4KICBJc3N1ZTogQ09NUFJFU1MtMjIwLgoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogVHlwbyBpbiBDb21wcmVzc29yU3RyZWFtRmFjdG9yeSBKYXZhZG9jCiAgSXNzdWU6IENPTVBSRVNTLTIxOC4KICBUaGFua3MgdG8gR2lsaS4KKiBBcmNoaXZlU3RyZWFtRmFjdG9yeSdzIHRhciBzdHJlYW0gZGV0ZWN0aW9uIGNyZWF0ZWQgZmFsc2UgcG9zaXRpdmVzCiAgZm9yIEFJRkYgZmlsZXMuCiAgSXNzdWU6IENPTVBSRVNTLTE5MS4KICBUaGFua3MgdG8gSnVra2EgWml0dGluZy4KKiBYWiBmb3IgSmF2YSBkaWRuJ3QgcHJvdmlkZSBhbiBPU0dpIGJ1bmRsZS4gIENvbXByZXNzJyBkZXBlbmRlbmN5IG9uCiAgaXQgaGFzIG5vdyBiZWVuIG1hcmtlZCBvcHRpb25hbCBzbyBDb21wcmVzcyBpdHNlbGYgY2FuIHN0aWxsIGJlIHVzZWQKICBpbiBhbiBPU0dpIGNvbnRleHQuCiAgSXNzdWU6IENPTVBSRVNTLTE5OS4KICBUaGFua3MgdG8gSnVra2EgWml0dGluZy4KKiBXaGVuIHNwZWNpZnlpbmcgdGhlIGVuY29kaW5nIGV4cGxpY2l0bHkgVGFyQXJjaGl2ZU91dHB1dFN0cmVhbSB3b3VsZAogIHdyaXRlIHVucmVhZGFibGUgbmFtZXMgaW4gR05VIG1vZGUgb3IgZXZlbiBjYXVzZSBlcnJvcnMgaW4gUE9TSVgKICBtb2RlIGZvciBmaWxlIG5hbWVzIGxvbmdlciB0aGFuIDY2IGNoYXJhY3RlcnMuCiAgSXNzdWU6IENPTVBSRVNTLTIwMC4KICBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaGxpY2h0aGVybGUuCiogV3JpdGluZyBUQVIgUEFYIGhlYWRlcnMgZmFpbGVkIGlmIHRoZSBnZW5lcmF0ZWQgZW50cnkgbmFtZSBlbmRlZAogIHdpdGggYSAiLyIuCiAgSXNzdWU6IENPTVBSRVNTLTIwMy4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gc29tZXRpbWVzIGZhaWxlZCB0byBwcm92aWRlIGlucHV0IHRvIHRoZQogIEluZmxhdGVyIHdoZW4gaXQgbmVlZGVkIGl0LCBsZWFkaW5nIHRvIHJlYWRzIHJldHVybmluZyAwLgogIElzc3VlOiBDT01QUkVTUy0xODkuCiAgVGhhbmtzIHRvIERhbmllbCBMb3dlLgoqIFRhckFyY2hpdmVJbnB1dFN0cmVhbSBpZ25vcmVkIHRoZSBlbmNvZGluZyBmb3IgR05VIGxvbmcgbmFtZQogIGVudHJpZXMuCiAgSXNzdWU6IENPTVBSRVNTLTIxMi4KKiBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gY291bGQgbGVhdmUgdGhlIHNlY29uZCBFT0YgcmVjb3JkIGluc2lkZSB0aGUKICBzdHJlYW0gaXQgaGFkIGp1c3QgZmluaXNoZWQgcmVhZGluZy4KICBJc3N1ZTogQ09NUFJFU1MtMjA2LgogIFRoYW5rcyB0byBQZXRlciBEZSBNYWV5ZXIuCiogRHVtcEFyY2hpdmVJbnB1dFN0cmVhbSBubyBsb25nZXIgaW1wbGljaXRseSBjbG9zZXMgdGhlIG9yaWdpbmFsCiAgaW5wdXQgc3RyZWFtIHdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBhcmNoaXZlLgoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBub3cgY29uc3VtZXMgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJjaGl2ZSB3aGVuCiAgZ2V0TmV4dFppcEVudHJ5IHJldHVybnMgbnVsbC4KKiBVbml0IHRlc3RzIGNvdWxkIGZhaWwgaWYgdGhlIHNvdXJjZSB0cmVlIHdhcyBjaGVja2VkIG91dCB0byBhCiAgZGlyZWN0b3J5IHRyZWUgY29udGFpbmlnbiBzcGFjZXMuCiAgSXNzdWU6IENPTVBSRVNTLTIwNS4KICBUaGFua3MgdG8gRGFuaWVsIExvd2UuCiogRml4ZWQgYSBwb3RlbnRpYWwgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIHdoZW4gcmVhZGluZyBTVE9SRUQKICBlbnRyaWVzIGZyb20gWmlwQXJjaGl2ZUlucHV0U3RyZWFtLgogIElzc3VlOiBDT01QUkVTUy0yMTkuCiogQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkgY2FuIG5vdyBiZSB1c2VkIHdpdGhvdXQgWFogZm9yIEphdmEgYmVpbmcKICBhdmFpbGFibGUuCiAgSXNzdWU6IENPTVBSRVNTLTIyMS4KCkNoYW5nZXMKLS0tLS0tLQoqIEltcHJvdmVkIGV4Y2VwdGlvbiBtZXNzYWdlIGlmIGEgemlwIGFyY2hpdmUgY2Fubm90IGJlIHJlYWQgYmVjYXVzZQogIG9mIGFuIHVuc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZC4KICBJc3N1ZTogQ09NUFJFU1MtMTg4LgogIFRoYW5rcyB0byBIYXJhbGQgS3Vobi4KKiBBcmNoaXZlU3RyZWFtRmFjdG9yeSBoYXMgYSBzZXR0aW5nIGZvciBmaWxlIG5hbWUgZW5jb2RpbmcgdGhhdCBzZXRzCiAgdXAgZW5jb2RpbmcgZm9yIFpJUCBhbmQgVEFSIHN0cmVhbXMuCiAgSXNzdWU6IENPTVBSRVNTLTE5Mi4KICBUaGFua3MgdG8gSnVra2EgWml0dGluZy4KKiBUYXJBcmNoaXZlRW50cnkgbm93IGhhcyBhIG1ldGhvZCB0byB2ZXJpZnkgaXRzIGNoZWNrc3VtLgogIElzc3VlOiBDT01QUkVTUy0xOTEuCiAgVGhhbmtzIHRvIEp1a2thIFppdHRpbmcuCiogU3BsaXQvc3Bhbm5lZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdyBwcm9wZXJseSBkZXRlY3RlZCBieQogIEFyY2hpdmVTdHJlYW1GYWN0b3J5IGJ1dCB3aWxsIGNhdXNlIGFuCiAgVW5zdXBwb3J0ZWRaaXBGZWF0dXJlRXhjZXB0aW9uIHdoZW4gcmVhZC4KKiBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gbm93IHJlYWRzIGFyY2hpdmVzIHRoYXQgc3RhcnQgd2l0aCBhICJQSzAwIgogIHNpZ25hdHVyZS4gIEFyY2hpdmVzIHdpdGggdGhpcyBzaWduYXR1cmVzIGFyZSBjcmVhdGVkIHdoZW4gdGhlCiAgYXJjaGl2ZXIgd2FzIHdpbGxpbmcgdG8gc3BsaXQgdGhlIGFyY2hpdmUgYnV0IGluIHRoZSBlbmQgb25seSBuZWVkZWQKICBhIHNpbmdsZSBzZWdtZW50IC0gc28gZGlkbid0IHNwbGl0IGFueXRoaW5nLgogIElzc3VlOiBDT01QUkVTUy0yMDguCiogVGFyQXJjaGl2ZUVudHJ5IGhhcyBhIG5ldyBjb25zdHJ1Y3RvciB0aGF0IGFsbG93cyBzZXR0aW5nIGxpbmtGbGFnCiAgYW5kIHByZXNlcnZlTGVhZGluZ1NsYXNoZXMgYXQgdGhlIHNhbWUgdGltZS4KICBJc3N1ZTogQ09NUFJFU1MtMjAxLgoqIENoYW5nZVNldFBlcmZvcm1lciBoYXMgYSBuZXcgcGVyZm9ybSBvdmVybG9hZCB0aGF0IHVzZXMgYSBaaXBGaWxlCiAgaW5zdGFuY2UgYXMgaW5wdXQuCiAgSXNzdWU6IENPTVBSRVNTLTE1OS4KKiBHYXJiYWdlIGNvbGxlY3Rpb24gcHJlc3N1cmUgaGFzIGJlZW4gcmVkdWNlZCBieSByZXVzaW5nIHRlbXBvcmFyeQogIGJ5dGUgYXJyYXlzIGluIGNsYXNzZXMuCiAgSXNzdWU6IENPTVBSRVNTLTE3Mi4KICBUaGFua3MgdG8gVGhvbWFzIE1haXIuCiogQ2FuIG5vdyBoYW5kbGUgemlwIGV4dHJhIGZpZWxkIDB4NTQ1NSAtIEV4dGVuZGVkIFRpbWVzdGFtcC4KICBJc3N1ZTogQ09NUFJFU1MtMjEwLgogIFRoYW5rcyB0byBKdWxpdXMgRGF2aWVzLgoqIGhhbmRsZSB6aXAgZXh0cmEgZmllbGQgMHg3ODc1IC0gSW5mbyBaaXAgTmV3IFVuaXggRXh0cmEgRmllbGQuCiAgSXNzdWU6IENPTVBSRVNTLTIxMS4KICBUaGFua3MgdG8gSnVsaXVzIERhdmllcy4KKiBaaXBTaG9ydCwgWmlwTG9uZywgWmlwRWlnaHRCeXRlSW50ZWdlciBzaG91bGQgaW1wbGVtZW50IFNlcmlhbGl6YWJsZQogIElzc3VlOiBDT01QUkVTUy0yMTMuCiAgVGhhbmtzIHRvIEp1bGl1cyBEYXZpZXMuCiogYmV0dGVyIHN1cHBvcnQgZm9yIFVuaXggc3ltbGlua3MgaW4gWmlwRmlsZSBlbnRyaWVzLgogIElzc3VlOiBDT01QUkVTUy0yMTQuCiAgVGhhbmtzIHRvIEp1bGl1cyBEYXZpZXMuCiogWmlwRmlsZSdzIGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGltcHJvdmVkIGZvciBub24tWmlwNjQgYXJjaGl2ZXMuCiAgSXNzdWU6IENPTVBSRVNTLTIxNS4KICBUaGFua3MgdG8gUm9iaW4gUG93ZXIuCiogVXBkYXRlZCBYWiBmb3IgSmF2YSBkZXBlbmRlbmN5IHRvIDEuMiBhcyB0aGlzIHZlcnNpb24gcHJvdmlkZXMKICBwcm9wZXIgT1NHaSBtYW5pZmVzdCBhdHRyaWJ1dGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS40LjEKLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIHNlY3VyaXR5IGJ1Z2ZpeCByZWxlYXNlLCBzZWUKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29tcHJlc3Mvc2VjdXJpdHkuaHRtbCNGaXhlZF9pbl9BcGFjaGVfQ29tbW9uc19Db21wcmVzc18xLjQuMQoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogUG9ydGVkIGxpYmJ6aXAyJ3MgZmFsbGJhY2sgc29ydCBhbGdvcml0aG0gdG8KICBCWmlwMkNvbXByZXNzb3JPdXRwdXRTdHJlYW0gdG8gc3BlZWQgdXAgY29tcHJlc3Npb24gaW4gY2VydGFpbgogIGVkZ2UgY2FzZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjQKLS0tLS0tLS0tLS0KCk5ldyBmZWF0dXJlcwotLS0tLS0tLS0tLS0KKiBDT01QUkVTUy0xNTY6ICBTdXBwb3J0IGZvciB0aGUgWFogZm9ybWF0IGhhcyBiZWVuIGFkZGVkLiAKCkZpeGVkIEJ1Z3MKLS0tLS0tLS0tLQoqIENPTVBSRVNTLTE4MzogIFRoZSB0YXIgcGFja2FnZSBub3cgYWxsb3dzIHRoZSBlbmNvZGluZyBvZiBmaWxlIG5hbWVzIHRvIGJlCiAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgUEFYIGV4dGVuc2lvbiBoZWFkZXJzIHRvCiAgICAgICAgICAgICAgICAgd3JpdGUgbm9uLUFTQ0lJIGZpbGUgbmFtZXMuCiAgICAgICAgICAgICAgICAgVGhlIHN0cmVhbSBjbGFzc2VzIG5vdyB3cml0ZSAob3IgZXhwZWN0IHRvIHJlYWQpIGFyY2hpdmVzIHRoYXQKICAgICAgICAgICAgICAgICB1c2UgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGVuY29kaW5nIGZvciBmaWxlIG5hbWVzLiAgQXBhY2hlCiAgICAgICAgICAgICAgICAgQ29tbW9ucyBDb21wcmVzcyAxLjMgdXNlZCB0byBzdHJpcCBldmVyeXRoaW5nIGJ1dCB0aGUgbG93ZXIKICAgICAgICAgICAgICAgICBlaWdodCBiaXRzIG9mIGVhY2ggY2hhcmFjdGVyIHdoaWNoIGVmZmVjdGl2ZWx5IG9ubHkgd29ya2VkIGZvcgogICAgICAgICAgICAgICAgIEFTQ0lJIGFuZCBJU08tODg1OS0xIGZpbGUgbmFtZXMuCiAgICAgICAgICAgICAgICAgVGhpcyBuZXcgZGVmYXVsdCBiZWhhdmlvciBpcyBhIGJyZWFraW5nIGNoYW5nZS4gCiogQ09NUFJFU1MtMTg0OiAgVGFyQXJjaGl2ZUlucHV0U3RyZWFtIGZhaWxlZCB0byBwYXJzZSBQQVggaGVhZGVycyB0aGF0CiAgICAgICAgICAgICAgICAgY29udGFpbmVkIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiAKKiBDT01QUkVTUy0xNzg6ICBUYXJBcmNoaXZlSW5wdXRTdHJlYW0gdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbnN0ZWFkIG9mIElPRXhjZXB0aW9uIAoqIENPTVBSRVNTLTE3OTogIFRhclV0aWxzLmZvcm1hdExvbmdPY3RhbE9yQmluYXJ5Qnl0ZXMoKSBhc3N1bWVzIHRoZSBmaWVsZCB3aWxsIGJlIDEyIGJ5dGVzIGxvbmcgCiogQ09NUFJFU1MtMTc1OiAgR05VIFRhciBzb21ldGltZXMgdXNlcyBiaW5hcnkgZW5jb2RpbmcgZm9yIFVJRCBhbmQgR0lEIAoqIENPTVBSRVNTLTE3MTogIEFyY2hpdmVTdHJlYW1GYWN0b3J5LmNyZWF0ZUFyY2hpdmVJbnB1dFN0cmVhbSB3b3VsZCBjbGFpbQogICAgICAgICAgICAgICAgIHNob3J0IHRleHQgZmlsZXMgd2VyZSBUQVIgYXJjaGl2ZXMuIAoqIENPTVBSRVNTLTE2NDogIFppcEZpbGUgZGlkbid0IHdvcmsgcHJvcGVybHkgZm9yIGFyY2hpdmVzIHVzaW5nIHVuaWNvZGUgZXh0cmEKICAgICAgICAgICAgICAgICBmaWVsZHMgcmF0aGVyIHRoYW4gVVRGLTggZmlsZW5hbWVzIGFuZCB0aGUgRUZTLUZsYWcuIAoqIENPTVBSRVNTLTE2OTogIEZvciBjb3JydXB0IGFyY2hpdmVzIFppcEZpbGUgd291bGQgdGhyb3cgYSBSdW50aW1lRXhjZXB0aW9uIGluCiAgICAgICAgICAgICAgICAgc29tZSBjYXNlcyBhbmQgYW4gSU9FeGNlcHRpb24gaW4gb3RoZXJzLiAgSXQgd2lsbCBub3cKICAgICAgICAgICAgICAgICBjb25zaXN0ZW50bHkgdGhyb3cgYW4gSU9FeGNlcHRpb24uIAoKQ2hhbmdlcwotLS0tLS0tCiogQ09NUFJFU1MtMTgyOiAgVGhlIHRhciBwYWNrYWdlIGNhbiBub3cgd3JpdGUgYXJjaGl2ZXMgdGhhdCB1c2Ugc3Rhci9HTlUvQlNECiAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyBvciB1c2UgdGhlIFBPU0lYL1BBWCB2YXJpYW50IHRvIHN0b3JlIG51bWVyaWMKICAgICAgICAgICAgICAgICB2YWx1ZXMgdGhhdCBkb24ndCBmaXQgaW50byB0aGUgdHJhZGl0aW9uYWwgaGVhZGVyIGZpZWxkcy4gCiogQ09NUFJFU1MtMTgxOiAgQWRkZWQgYSB3b3JrYXJvdW5kIGZvciBhIEJ1ZyBzb21lIHRhciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhZGQKICAgICAgICAgICAgICAgICBhIE5VTCBieXRlIGFzIGZpcnN0IGJ5dGUgaW4gbnVtZXJpYyBoZWFkZXIgZmllbGRzLiAKKiBDT01QUkVTUy0xNzY6ICBBZGRlZCBhIHdvcmthcm91bmQgZm9yIGEgQnVnIGluIFdpblpJUCB3aGljaCB1c2VzIGJhY2tzbGFzaGVzCiAgICAgICAgICAgICAgICAgYXMgcGF0aCBzZXBhcmF0b3JzIGluIFVuaWNvZGUgRXh0cmEgRmllbGRzLiAKKiBDT01QUkVTUy0xMzE6ICBBcnJheU91dE9mQm91bmRzIHdoaWxlIGRlY29tcHJlc3NpbmcgYnoyLiBBZGRlZCB0ZXN0IGNhc2UgLSBjb2RlIGFscmVhZHkgc2VlbXMgdG8gaGF2ZSBiZWVuIGZpeGVkLiAKKiBDT01QUkVTUy0xNDY6ICBCWmlwMkNvbXByZXNzb3JJbnB1dFN0cmVhbSBub3cgb3B0aW9uYWxseSBzdXBwb3J0cyByZWFkaW5nIG9mCiAgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVkIC5iejIgZmlsZXMuIAoqIENPTVBSRVNTLTE1NDogIEdaaXBDb21wcmVzc29ySW5wdXRTdHJlYW0gbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgcmVhZGluZyBvZgogICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMuIAoqIENPTVBSRVNTLTE2OiAgVGhlIHRhciBwYWNrYWdlIGNhbiBub3cgcmVhZCBhcmNoaXZlcyB0aGF0IHVzZSBzdGFyL0dOVS9CU0QKICAgICAgICAgICAgICAgICBleHRlbnNpb25zIGZvciBmaWxlcyB0aGF0IGFyZSBsb25nZXIgdGhhbiA4IEdCeXRlIGFzIHdlbGwgYXMKICAgICAgICAgICAgICAgICBhcmNoaXZlcyB0aGF0IHVzZSB0aGUgUE9TSVgvUEFYIHZhcmlhbnQuIAoqIENPTVBSRVNTLTE2NTogIFRoZSB0YXIgcGFja2FnZSBjYW4gbm93IHdyaXRlIGFyY2hpdmVzIHRoYXQgdXNlIHN0YXIvR05VL0JTRAogICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgZm9yIGZpbGVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIDggR0J5dGUgYXMgd2VsbCBhcwogICAgICAgICAgICAgICAgIGFyY2hpdmVzIHRoYXQgdXNlIHRoZSBQT1NJWC9QQVggdmFyaWFudC4gCiogQ09NUFJFU1MtMTY2OiAgVGhlIHRhciBwYWNrYWdlIGNhbiBub3cgdXNlIHRoZSBQT1NJWC9QQVggdmFyaWFudCBmb3Igd3JpdGluZwogICAgICAgICAgICAgICAgIGVudHJpZXMgd2l0aCBuYW1lcyBsb25nZXIgdGhhbiAxMDAgY2hhcmFjdGVycy4gCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVsZWFzZSAxLjMKLS0tLS0tLS0tLS0KCkNvbW1vbnMgQ29tcHJlc3MgMS4zIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRvIHJlcXVpcmUgSmF2YTUgYXQgcnVudGltZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogU3VwcG9ydCBmb3IgdGhlIFBhY2syMDAgZm9ybWF0IGhhcyBiZWVuIGFkZGVkLiAgSXNzdWU6IENPTVBSRVNTLTE0Mi4gCiogUmVhZC1vbmx5IHN1cHBvcnQgZm9yIHRoZSBmb3JtYXQgdXNlZCBieSB0aGUgVW5peCBkdW1wKDgpIHRvb2wKICBoYXMgYmVlbiBhZGRlZC4gIElzc3VlOiBDT01QUkVTUy0xMzIuIAoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogQlppcDJDb21wcmVzc29ySW5wdXRTdHJlYW0ncyBnZXRCeXRlc1JlYWQgbWV0aG9kIGFsd2F5cwogIHJldHVybmVkIDAuIAoqIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBhbmQgWmlwQXJjaGl2ZU91dHB1dFN0cmVhbSBjb3VsZCBsZWFrCiAgcmVzb3VyY2VzIG9uIHNvbWUgSkRLcy4gIElzc3VlOiBDT01QUkVTUy0xNTIuIAoqIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0ncyBnZXRCeXRlc1dyaXR0ZW4gbWV0aG9kIGRpZG4ndCBjb3VudAogIGNvcnJlY3RseS4gIElzc3VlOiBDT01QUkVTUy0xNjAuIAoKQ2hhbmdlcwotLS0tLS0tCiogVGhlIFpJUCBwYWNrYWdlIG5vdyBzdXBwb3J0cyBaaXA2NCBleHRlbnNpb25zLiAgSXNzdWU6IENPTVBSRVNTLTM2LiAKKiBUaGUgQVIgcGFja2FnZSBub3cgc3VwcG9ydHMgdGhlIEJTRCBkaWFsZWN0IG9mIHN0b3JpbmcgZmlsZQogIG5hbWVzIGxvbmdlciB0aGFuIDE2IGNoYXJzIChib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcpLgogIElzc3VlOiBDT01QUkVTUy0xNDQuIAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlbGVhc2UgMS4yCi0tLS0tLS0tLS0tCgpOZXcgZmVhdHVyZXMKLS0tLS0tLS0tLS0tCiogQ09NUFJFU1MtMTIzOiAgWmlwQXJjaGl2ZUVudHJ5IGhhcyBhIG5ldyBtZXRob2QgZ2V0UmF3TmFtZSB0aGF0IHByb3ZpZGVzIHRoZQogICAgICAgIG9yaWdpbmFsIGJ5dGVzIHRoYXQgbWFkZSB1cCB0aGUgbmFtZS4gIFRoaXMgbWF5IGFsbG93IHVzZXIKICAgICAgICBjb2RlIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcuIAoqIENPTVBSRVNTLTEyMjogIFRhckFyY2hpdmVFbnRyeSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZsYWdzIHRoYXQgZGV0ZXJtaW5lCiAgICAgICAgd2hldGhlciBpdCBpcyBhbiBhcmNoaXZlZCBzeW1ib2xpYyBsaW5rLCBwaXBlIG9yIG90aGVyCiAgICAgICAgInVuY29tbW9uIiBmaWxlIHN5c3RlbSBvYmplY3QuIAoKRml4ZWQgQnVnczoKKiBDT01QUkVTUy0xMjk6ICBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gY291bGQgZmFpbCB3aXRoIGEgIlRydW5jYXRlZCBaSVAiIGVycm9yCiAgICAgICAgbWVzc2FnZSBmb3IgZW50cmllcyBiZXR3ZWVuIDIgR0J5dGUgYW5kIDQgR0J5dGUgaW4gc2l6ZS4gCiogQ09NUFJFU1MtMTQ1OiAgVGFyQXJjaGl2ZUlucHV0U3RyZWFtIG5vdyBkZXRlY3RzIHNwYXJzZSBlbnRyaWVzIHVzaW5nIHRoZQogICAgICAgIG9sZGdudSBmb3JtYXQgYW5kIHByb3Blcmx5IHJlcG9ydHMgaXQgY2Fubm90IGV4dHJhY3QgdGhlaXIKICAgICAgICBjb250ZW50cy4gCiogQ09NUFJFU1MtMTMwOiAgVGhlIEphdmFkb2MgZm9yIFppcEFyY2hpdmVJbnB1dFN0cmVhbSNza2lwIG5vdyBtYXRjaGVzIHRoZQogICAgICAgIGltcGxlbWVudGF0aW9uLCB0aGUgY29kZSBoYXMgYmVlbiBtYWRlIG1vcmUgZGVmZW5zaXZlLiAKKiBDT01QUkVTUy0xNDA6ICBBckFyY2hpdmVJbnB1dFN0cmVhbSBmYWlscyBpZiBlbnRyaWVzIGNvbnRhaW4gb25seSBibGFua3MgZm9yCiAgICAgICAgdXNlcklkIG9yIGdyb3VwSWQuIFRoYW5rcyB0byBUcmVqa2F6LiAKKiBDT01QUkVTUy0xMzk6ICBaaXBGaWxlIG1heSBsZWFrIHJlc291cmNlcyBvbiBzb21lIEpES3MuIAoqIENPTVBSRVNTLTEyNTogIEJaaXAyQ29tcHJlc3NvcklucHV0U3RyZWFtIHRocm93cyBJT0V4Y2VwdGlvbiBpZgogICAgICAgIHVuZGVybHlpbmcgc3RyZWFtIHJldHVybnMgYXZhaWxhYmxlKCkgPT0gMC4KICAgICAgICBSZW1vdmVkIHRoZSBjaGVjay4gCiogQ09NUFJFU1MtMTI3OiAgQ2FsbGluZyBjbG9zZSgpIG9uIGlucHV0U3RyZWFtIHJldHVybmVkIGJ5CiAgICAgICAgQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkuY3JlYXRlQ29tcHJlc3NvcklucHV0U3RyZWFtKCkKICAgICAgICBkb2VzIG5vdCBjbG9zZSB0aGUgdW5kZXJseWluZyBpbnB1dCBzdHJlYW0uIAoqIENPTVBSRVNTLTExOTogIFRhckFyY2hpdmVPdXRwdXRTdHJlYW0jZmluaXNoIG5vdyB3cml0ZXMgYWxsIGJ1ZmZlcmVkCiAgICAgICAgZGF0YSB0byB0aGUgc3RyZWFtIAoKQ2hhbmdlcwotLS0tLS0tCiogWmlwRmlsZSBub3cgaW1wbGVtZW50cyBmaW5hbGl6ZSB3aGljaCBjbG9zZXMgdGhlIHVuZGVybHlpbmcKICAgICAgICBmaWxlLiAKKiBDT01QUkVTUy0xMTc6ICBDZXJ0YWluIHRhciBmaWxlcyBub3QgcmVjb2duaXNlZCBieQogICAgICAgIEFyY2hpdmVTdHJlYW1GYWN0b3J5LiAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSZWxlYXNlIDEuMQotLS0tLS0tLS0tLQoKTmV3IGZlYXR1cmVzCi0tLS0tLS0tLS0tLQoqIENPTVBSRVNTLTEwODogIENvbW1hbmQtbGluZSBpbnRlcmZhY2UgdG8gbGlzdCBhcmNoaXZlIGNvbnRlbnRzLgogICAgICAgVXNhZ2U6IGphdmEgLWphciBjb21tb25zLWNvbXByZXNzLW4ubS5qYXIgYXJjaGl2ZS1uYW1lIFt6aXB8dGFyfGV0Y10gCiogQ09NUFJFU1MtMTA5OiAgVGFyIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgUGF4IGhlYWRlcnMKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHJlYWRpbmcgcGF4IGhlYWRlcnMuCiAgICAgICBOb3RlOiBkb2VzIG5vdCBzdXBwb3J0IGdsb2JhbCBwYXggaGVhZGVycyAKKiBDT01QUkVTUy0xMDM6ICBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gY2FuIG9wdGlvbmFsbHkgZXh0cmFjdCBkYXRhIHRoYXQgdXNlZAogICAgICAgIHRoZSBTVE9SRUQgY29tcHJlc3Npb24gbWV0aG9kIGFuZCBhIGRhdGEgZGVzY3JpcHRvci4KICAgICAgICBEb2luZyBzbyBpbiBhIHN0cmVhbSBpcyBub3Qgc2FmZSBpbiBnZW5lcmFsLCBzbyB5b3UgaGF2ZSB0bwogICAgICAgIGV4cGxpY2l0bHkgZW5hYmxlIHRoZSBmZWF0dXJlLiAgQnkgZGVmYXVsdCB0aGUgc3RyZWFtIHdpbGwKICAgICAgICB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgZW5jb3VudGVycyBzdWNoIGFuIGVudHJ5LiAKKiBDT01QUkVTUy05ODogIFRoZSBaSVAgY2xhc3NlcyB3aWxsIHRocm93IHNwZWNpYWxpemVkIGV4Y2VwdGlvbnMgaWYgYW55CiAgICAgICAgYXR0ZW1wdCBpcyBtYWRlIHRvIHJlYWQgb3Igd3JpdGUgZGF0YSB0aGF0IHVzZXMgemlwIGZlYXR1cmVzCiAgICAgICAgbm90IHN1cHBvcnRlZCAoeWV0KS4gCiogQ09NUFJFU1MtOTk6ICBaaXBGaWxlI2dldEVudHJpZXMgcmV0dXJucyBlbnRyaWVzIGluIGEgcHJlZGljdGFibGUgb3JkZXIgLQogICAgICAgIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbnNpZGUgdGhlIGNlbnRyYWwgZGlyZWN0b3J5LgogICAgICAgIEEgbmV3IG1ldGhvZCBnZXRFbnRyaWVzSW5QaHlzaWNhbE9yZGVyIHJldHVybnMgZW50cmllcyBpbgogICAgICAgIG9yZGVyIG9mIHRoZSBlbnRyeSBkYXRhLCBpLmUuIHRoZSBvcmRlciBaaXBBcmNoaXZlSW5wdXRTdHJlYW0KICAgICAgICB3b3VsZCBzZWUuIAoqIFRoZSBBcmNoaXZlKlN0cmVhbSBhbmQgWmlwRmlsZSBjbGFzc2VzIG5vdyBoYXZlCiAgICAgICAgY2FuKFJlYWR8V3JpdGUpRW50cnlEYXRhIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjawogICAgICAgIHdoZXRoZXIgYSBnaXZlbiBlbnRyeSdzIGRhdGEgY2FuIGJlIHJlYWQvd3JpdHRlbi4KICAgICAgICBUaGUgbWV0aG9kIGN1cnJlbnRseSByZXR1cm5zIGZhbHNlIGZvciBaSVAgYXJjaGl2ZXMgaWYgYW4KICAgICAgICBlbnRyeSB1c2VzIGFuIHVuc3VwcG9ydGVkIGNvbXByZXNzaW9uIG1ldGhvZCBvciBlbmNyeXB0aW9uLiAKKiBDT01QUkVTUy04OTogIFRoZSBaSVAgY2xhc3NlcyBub3cgZGV0ZWN0IGVuY3J5cHRlZCBlbnRyaWVzLiAKKiBDT01QUkVTUy05NzogIEFkZGVkIGF1dG9kZXRlY3Rpb24gb2YgY29tcHJlc3Npb24gZm9ybWF0IHRvCiAgICAgICAgQ29tcHJlc3NvclN0cmVhbUZhY3RvcnkuIAoqIENPTVBSRVNTLTk1OiAgSW1wcm92ZSBFeGNlcHRpb25NZXNzYWdlcyBpbiBBcmNoaXZlU3RyZWFtRmFjdG9yeSBUaGFua3MgdG8gSm9lcmcgQmVsbG1hbm4uIAoqIEEgbmV3IGNvbnN0cnVjdG9yIG9mIFRhckFyY2hpdmVFbnRyeSBjYW4gY3JlYXRlIGVudHJpZXMgd2l0aAogICAgICAgIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBzbGFzaGVzIC0gdGhlIGRlZmF1bHQgaXMgdG8gc3RyaXAKICAgICAgICBsZWFkaW5nIHNsYXNoZXMgaW4gb3JkZXIgdG8gY3JlYXRlIHJlbGF0aXZlIHBhdGggbmFtZXMuIAoqIEFyY2hpdmVFbnRyeSBub3cgaGFzIGEgZ2V0TGFzdE1vZGlmaWVkRGF0ZSBtZXRob2QuIAoqIENPTVBSRVNTLTc4OiAgQWRkIGEgQlppcDJVdGlscyBjbGFzcyBtb2RlbGxlZCBhZnRlciBHWmlwVXRpbHMgVGhhbmtzIHRvIEp1a2thIFppdHRpbmcuIAoKRml4ZWQgQnVncwotLS0tLS0tLS0tCiogQ09NUFJFU1MtNzI6ICBNb3ZlIGFja25vd2xlZGdlbWVudHMgZnJvbSBOT1RJQ0UgdG8gUkVBRE1FIAoqIENPTVBSRVNTLTExMzogIFRhckFyY2hpdmVFbnRyeS5wYXJzZVRhckhlYWRlcigpIGluY2x1ZGVzIHRoZSB0cmFpbGluZyBzcGFjZS9OVUwgd2hlbiBwYXJzaW5nIHRoZSBvY3RhbCBzaXplIAoqIENPTVBSRVNTLTExODogIFRhclV0aWxzLnBhcnNlTmFtZSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSByYW5nZSAwLTEyNyAKKiBDT01QUkVTUy0xMDc6ICBBcmNoaXZlU3RyZWFtRmFjdG9yeSBkb2VzIG5vdCByZWNvZ25pc2UgdGFyIGZpbGVzIGNyZWF0ZWQgYnkgQW50IAoqIENPTVBSRVNTLTExMDogIFN1cHBvcnQgInVzdGFyIiBwcmVmaXggZmllbGQsIHdoaWNoIGlzIHVzZWQgd2hlbiBmaWxlIHBhdGhzIGFyZSBsb25nZXIKICAgICAgIHRoYW4gMTAwIGNoYXJhY3RlcnMuIAoqIENPTVBSRVNTLTEwMDogIFppcEFyY2hpdmVJbnB1dFN0cmVhbSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdCBkZXRlY3RzIGFuCiAgICAgICAgZW50cnkgdGhhdCB1c2VzIGEgZGF0YSBkZXNjcmlwdG9yIGZvciBhIFNUT1JFRCBlbnRyeSBzaW5jZSBpdAogICAgICAgIGNhbm5vdCByZWxpYWJseSBmaW5kIHRoZSBlbmQgb2YgZGF0YSBmb3IgdGhpcyAiY29tcHJlc3Npb24iCiAgICAgICAgbWV0aG9kLiAKKiBDT01QUkVTUy0xMDE6ICBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gc2hvdWxkIG5vdyBwcm9wZXJseSByZWFkIGFyY2hpdmVzIHRoYXQKICAgICAgICB1c2UgZGF0YSBkZXNjcmlwdG9ycyBidXQgd2l0aG91dCB0aGUgInVub2ZmaWNpYWwiIHNpZ25hdHVyZS4gCiogQ09NUFJFU1MtNzQ6ICBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gZmFpbGVkIHRvIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAgICAgICAgcmVhZCBwcm9wZXJseS4gCiogQXJjaGl2ZUlucHV0U3RyZWFtIGhhcyBhIG5ldyBtZXRob2QgZ2V0Qnl0ZXNSZWFkIHRoYXQgc2hvdWxkCiAgICAgICAgYmUgcHJlZmVycmVkIG92ZXIgZ2V0Q291bnQgc2luY2UgdGhlIGxhdGVyIG1heSB0cnVuY2F0ZSB0aGUKICAgICAgICBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmb3IgYmlnIGFyY2hpdmVzLiAKKiBDT01QUkVTUy04NTogIFRoZSBjcGlvIGFyY2hpdmVzIGNyZWF0ZWQgYnkgQ3Bpb0FyY2hpdmVPdXRwdXRTdHJlYW0gY291bGRuJ3QKICAgICAgICBiZSByZWFkIGJ5IG1hbnkgZXhpc3RpbmcgbmF0aXZlIGltcGxlbWVudGF0aW9ucyBiZWNhdXNlIHRoZQogICAgICAgIGFyY2hpdmVzIGNvbnRhaW5lZCBtdWx0aXBsZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgaW5vZGUvZGV2aWNlCiAgICAgICAgY29tYmluYXRpb25zIGFuZCB3ZXJlbid0IHBhZGRlZCB0byBhIGJsb2Nrc2l6ZSBvZiA1MTIgYnl0ZXMuIAoqIENPTVBSRVNTLTczOiAgWmlwQXJjaGl2ZUVudHJ5LCBaaXBGaWxlIGFuZCBaaXBBcmNoaXZlSW5wdXRTdHJlYW0gYXJlIG5vdwogICAgICAgIG1vcmUgbGVuaWVudCB3aGVuIHBhcnNpbmcgZXh0cmEgZmllbGRzLiAKKiBDT01QUkVTUy04MjogIGNwaW8gaXMgdGVycmlibHkgc2xvdy4KICAgICAgICBEb2N1bWVudGVkIHRoYXQgYnVmZmVyZWQgc3RyZWFtcyBhcmUgbmVlZGVkIGZvciBwZXJmb3JtYW5jZSAKKiBJbXByb3ZlZCBleGNlcHRpb24gbWVzc2FnZSBpZiB0aGUgZXh0cmEgZmllbGQgZGF0YSBpbiBaSVAKICAgICAgICBhcmNoaXZlcyBjYW5ub3QgYmUgcGFyc2VkLiAKKiBDT01QUkVTUy0xNzogIFRhciBmb3JtYXQgdW5zcGVjaWZpZWQgLSBjdXJyZW50IHN1cHBvcnQgZG9jdW1lbnRlZC4gCiogQ09NUFJFU1MtOTQ6ICBaaXBBcmNoaXZlRW50cnkncyBlcXVhbHMgbWV0aG9kIHdhcyBicm9rZW4gZm9yIGVudHJpZXMgY3JlYXRlZAogICAgICAgIHdpdGggdGhlIFN0cmluZy1hcmcgY29uc3RydWN0b3IuICBUaGlzIGxlYWQgdG8gYnJva2VuIFpJUAogICAgICAgIGFyY2hpdmVzIGlmIHR3byBkaWZmZXJlbnQgZW50cmllcyBoYWQgdGhlIHNhbWUgaGFzaCBjb2RlLiBUaGFua3MgdG8gQW5vbiBEZXZzLiAKKiBDT01QUkVTUy04NzogIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBjb3VsZCByZXBlYXRlZGx5IHJldHVybiAwIG9uIHJlYWQoKSB3aGVuCiAgICAgICAgdGhlIGFyY2hpdmUgd2FzIHRydW5jYXRlZC4gVGhhbmtzIHRvIEFudG9uaSBNeWxrYS4gCiogQ09NUFJFU1MtODY6ICBUYXIgYXJjaGl2ZSBlbnRyaWVzIGhvbGRpbmcgdGhlIGZpbGUgbmFtZSBmb3IgbmFtZXMgbG9uZ2VyCiAgICAgICAgdGhhbiAxMDAgY2hhcmFjdGVycyBpbiBHTlUgbG9uZ2ZpbGUgbW9kZSBkaWRuJ3QgcHJvcGVybHkKICAgICAgICBzcGVjaWZ5IHRoZXknZCBiZSB1c2luZyB0aGUgIm9sZGdudSIgZXh0ZW5zaW9uLiAKKiBDT01QUkVTUy04MzogIERlbGVnYXRlIGFsbCByZWFkIGFuZCB3cml0ZSBtZXRob2RzIGluIEdaaXAgc3RyZWFtIGluIG9yZGVyIHRvCiAgICAgICAgc3BlZWQgdXAgb3BlcmF0aW9ucy4gCiogVGhlIGFyIGFuZCBjcGlvIHN0cmVhbXMgbm93IHByb3Blcmx5IHJlYWQgYW5kIHdyaXRlIGxhc3QKICAgICAgICBtb2RpZmllZCB0aW1lcy4gCiogQ09NUFJFU1MtODE6ICBUYXJPdXRwdXRTdHJlYW0gY2FuIGxlYXZlIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZSAKCkNoYW5nZXMKLS0tLS0tLQoqIENPTVBSRVNTLTExMjogIEFyQXJjaGl2ZUlucHV0U3RyZWFtIGRvZXMgbm90IGhhbmRsZSBHTlUgZXh0ZW5kZWQgZmlsZW5hbWUgcmVjb3JkcyAoLy8pIAoqIENPTVBSRVNTLTEwNTogIERvY3VtZW50IHRoYXQgdGhlIG5hbWUgb2YgYW4gWmlwQXJjaGl2ZUVudHJ5IGRldGVybWluZXMgd2hldGhlcgogICAgICAgYW4gZW50cnkgaXMgY29uc2lkZXJlZCBhIGRpcmVjdG9yeSBvciBub3QuCiAgICAgICBJZiB5b3UgZG9uJ3QgdXNlIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBGaWxlIGFyZ3VtZW50IHRoZSBlbnRyeSdzCiAgICAgICAgbmFtZSBtdXN0IGVuZCBpbiBhICIvIiBpbiBvcmRlciBmb3IgdGhlIGVudHJ5IHRvIGJlIGtub3duIGFzIGEgZGlyZWN0b3J5LiAKKiBDT01QUkVTUy03OTogIE1vdmUgRE9TL0phdmEgdGltZSBjb252ZXJzaW9ucyBpbnRvIFppcCB1dGlsaXR5IGNsYXNzLiAKKiBDT01QUkVTUy03NTogIFppcEFyY2hpdmVJbnB1dFN0cmVhbSBkb2VzIG5vdCBzaG93IGxvY2F0aW9uIGluIGZpbGUKICAgICAgIHdoZXJlIGEgcHJvYmxlbSBvY2N1cnJlZC4gCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=