JElkJAoKSW5mb3JtYWwgc3RhbmRhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNLiBOaWxzc29uCkRvY3VtZW50OiBpZDN2Mi40LjAtZnJhbWVzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAxc3QgTm92ZW1iZXIgMjAwMAoKCiAgICAgICAgICAgICAgICAgIElEMyB0YWcgdmVyc2lvbiAyLjQuMCAtIE5hdGl2ZSBGcmFtZXMKClN0YXR1cyBvZiB0aGlzIGRvY3VtZW50CgogICBUaGlzIGRvY3VtZW50IGlzIGFuIGluZm9ybWFsIHN0YW5kYXJkIGFuZCByZXBsYWNlcyB0aGUgSUQzdjIuMy4wCiAgIHN0YW5kYXJkIFtJRDN2Ml0uIEEgZm9ybWFsIHN0YW5kYXJkIHdpbGwgdXNlIGFub3RoZXIgcmV2aXNpb24gbnVtYmVyCiAgIGV2ZW4gaWYgdGhlIGNvbnRlbnQgaXMgaWRlbnRpY2FsIHRvIGRvY3VtZW50LiBUaGUgY29udGVudHMgaW4gdGhpcwogICBkb2N1bWVudCBtYXkgY2hhbmdlIGZvciBjbGFyaWZpY2F0aW9ucyBidXQgbmV2ZXIgZm9yIGFkZGVkIG9yIGFsdGVyZWQKICAgZnVuY3Rpb25hbGxpdHkuCgogICBEaXN0cmlidXRpb24gb2YgdGhpcyBkb2N1bWVudCBpcyB1bmxpbWl0ZWQuCgoKQWJzdHJhY3QKCiAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBmcmFtZXMgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IElEM3YyLjQuMCwKICAgd2hpY2ggaXMgYSByZXZpc2VkIHZlcnNpb24gb2YgdGhlIElEM3YyIGluZm9ybWFsIHN0YW5kYXJkIFtJRDN2Mi4zLjBdCiAgIHZlcnNpb24gMi4zLjAuIFRoZSBJRDN2MiBvZmZlcnMgYSBmbGV4aWJsZSB3YXkgb2Ygc3RvcmluZyBhdWRpbyBtZXRhCiAgIGluZm9ybWF0aW9uIHdpdGhpbiBhdWRpbyBmaWxlIGl0c2VsZi4gVGhlIGluZm9ybWF0aW9uIG1heSBiZQogICB0ZWNobmljYWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgZXF1YWxpc2F0aW9uIGN1cnZlcywgYXMgd2VsbCBhcyB0aXRsZSwKICAgcGVyZm9ybWVyLCBjb3B5cmlnaHQgZXRjLgoKICAgSUQzdjIuNC4wIGlzIG1lYW50IHRvIGJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIElEM3YyLjMuMCBpbiBvcmRlcgogICB0byBhbGxvdyBmb3IgaW1wbGVtZW50YXRpb25zIHRvIGJlIHJldmlzZWQgYXMgZWFzaWx5IGFzIHBvc3NpYmxlLgoKCjEuICAgVGFibGUgb2YgY29udGVudHMKCiAgIDIuICAgQ29udmVudGlvbnMgaW4gdGhpcyBkb2N1bWVudAogICAzLiAgIERlZmF1bHQgZmxhZ3MKICAgNC4gICBEZWNsYXJlZCBJRDN2MiBmcmFtZXMKICAgICA0LjEuICAgVW5pcXVlIGZpbGUgaWRlbnRpZmllcgogICAgIDQuMi4gICBUZXh0IGluZm9ybWF0aW9uIGZyYW1lcwogICAgICAgNC4yLjEuICAgSWRlbnRpZmljYXRpb24gZnJhbWVzCiAgICAgICA0LjIuMi4gICBJbnZvbHZlZCBwZXJzb25zIGZyYW1lcwogICAgICAgNC4yLjMuICAgRGVyaXZlZCBhbmQgc3ViamVjdGl2ZSBwcm9wZXJ0aWVzIGZyYW1lcwogICAgICAgNC4yLjQuICAgUmlnaHRzIGFuZCBsaWNlbnNlIGZyYW1lcwogICAgICAgNC4yLjUuICAgT3RoZXIgdGV4dCBmcmFtZXMKICAgICAgIDQuMi42LiAgIFVzZXIgZGVmaW5lZCB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lCiAgICAgNC4zLiAgIFVSTCBsaW5rIGZyYW1lcwogICAgICAgNC4zLjEuICAgVVJMIGxpbmsgZnJhbWVzIC0gZGV0YWlscwogICAgICAgNC4zLjIuICAgVXNlciBkZWZpbmVkIFVSTCBsaW5rIGZyYW1lCiAgICAgNC40LiAgIE11c2ljIENEIElkZW50aWZpZXIKICAgICA0LjUuICAgRXZlbnQgdGltaW5nIGNvZGVzCiAgICAgNC42LiAgIE1QRUcgbG9jYXRpb24gbG9va3VwIHRhYmxlCiAgICAgNC43LiAgIFN5bmNlZCB0ZW1wbyBjb2RlcwogICAgIDQuOC4gICBVbnN5bmNocm9uaXNlZCBseXJpY3MvdGV4dCB0cmFuc2NyaXB0aW9uCiAgICAgNC45LiAgU3luY2hyb25pc2VkIGx5cmljcy90ZXh0CiAgICAgNC4xMC4gIENvbW1lbnRzCiAgICAgNC4xMS4gIFJlbGF0aXZlIHZvbHVtZSBhZGp1c3RtZW50ICgyKQogICAgIDQuMTIuICBFcXVhbGlzYXRpb24gKDIpCiAgICAgNC4xMy4gIFJldmVyYgogICAgIDQuMTQuICBBdHRhY2hlZCBwaWN0dXJlCiAgICAgNC4xNS4gIEdlbmVyYWwgZW5jYXBzdWxhdGVkIG9iamVjdAogICAgIDQuMTYuICBQbGF5IGNvdW50ZXIKICAgICA0LjE3LiAgUG9wdWxhcmltZXRlcgogICAgIDQuMTguICBSZWNvbW1lbmRlZCBidWZmZXIgc2l6ZQogICAgIDQuMTkuICBBdWRpbyBlbmNyeXB0aW9uCiAgICAgNC4yMC4gIExpbmtlZCBpbmZvcm1hdGlvbgogICAgIDQuMjEuICBQb3NpdGlvbiBzeW5jaHJvbmlzYXRpb24gZnJhbWUKICAgICA0LjIyLiAgVGVybXMgb2YgdXNlCiAgICAgNC4yMy4gIE93bmVyc2hpcCBmcmFtZQogICAgIDQuMjQuICBDb21tZXJjaWFsIGZyYW1lCiAgICAgNC4yNS4gIEVuY3J5cHRpb24gbWV0aG9kIHJlZ2lzdHJhdGlvbgogICAgIDQuMjYuICBHcm91cCBpZGVudGlmaWNhdGlvbiByZWdpc3RyYXRpb24KICAgICA0LjI3LiAgUHJpdmF0ZSBmcmFtZQogICAgIDQuMjguICBTaWduYXR1cmUgZnJhbWUKICAgICA0LjI5LiAgU2VlayBmcmFtZQogICAgIDQuMzAuICBBdWRpbyBzZWVrIHBvaW50IGluZGV4CiAgIDUuICAgQ29weXJpZ2h0CiAgIDYuICAgUmVmZXJlbmNlcwogICA3LiAgIEFwcGVuZGl4CiAgICAgQS4gICBBcHBlbmRpeCBBIC0gR2VucmUgTGlzdCBmcm9tIElEM3YxCiAgIDguICAgQXV0aG9yJ3MgQWRkcmVzcwoKCjIuICAgQ29udmVudGlvbnMgaW4gdGhpcyBkb2N1bWVudAoKICAgVGV4dCB3aXRoaW4gIiIgaXMgYSB0ZXh0IHN0cmluZyBleGFjdGx5IGFzIGl0IGFwcGVhcnMgaW4gYSB0YWcuCiAgIE51bWJlcnMgcHJlY2VkZWQgd2l0aCAkIGFyZSBoZXhhZGVjaW1hbCBhbmQgbnVtYmVycyBwcmVjZWRlZCB3aXRoICUKICAgYXJlIGJpbmFyeS4gJHh4IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBieXRlIHdpdGggdW5rbm93biBjb250ZW50LiAleAogICBpcyB1c2VkIHRvIGluZGljYXRlIGEgYml0IHdpdGggdW5rbm93biBjb250ZW50LiBUaGUgbW9zdCBzaWduaWZpY2FudAogICBiaXQgKE1TQikgb2YgYSBieXRlIGlzIGNhbGxlZCAnYml0IDcnIGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CiAgIChMU0IpIGlzIGNhbGxlZCAnYml0IDAnLgoKICAgQSB0YWcgaXMgdGhlIHdob2xlIHRhZyBkZXNjcmliZWQgdGhlIElEM3YyIG1haW4gc3RydWN0dXJlIGRvY3VtZW50CiAgIFtJRDN2Mi1zdHJjdF0uIEEgZnJhbWUgaXMgYSBibG9jayBvZiBpbmZvcm1hdGlvbiBpbiB0aGUgdGFnLiBUaGUgdGFnCiAgIGNvbnNpc3RzIG9mIGEgaGVhZGVyLCBmcmFtZXMgYW5kIG9wdGlvbmFsIHBhZGRpbmcuIEEgZmllbGQgaXMgYSBwaWVjZQogICBvZiBpbmZvcm1hdGlvbjsgb25lIHZhbHVlLCBhIHN0cmluZyBldGMuIEEgbnVtZXJpYyBzdHJpbmcgaXMgYSBzdHJpbmcKICAgdGhhdCBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyAiMDEyMzQ1Njc4OSIgb25seS4KCiAgIFRoZSBrZXkgd29yZHMgIk1VU1QiLCAiTVVTVCBOT1QiLCAiUkVRVUlSRUQiLCAiU0hBTEwiLCAiU0hBTEwgTk9UIiwKICAgIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgICJNQVkiLCBhbmQgIk9QVElPTkFMIiBpbiB0aGlzCiAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkgW0tFWVdPUkRTXS4KCgozLiAgIERlZmF1bHQgZmxhZ3MKCiAgIFRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgZnJhbWVzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGNhbiBiZQogICBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjbGFzc2VzLiBUaGUgZmxhZ3MgbWF5IGJlIHNldCBkaWZmZXJlbnRseQogICBpZiBmb3VuZCBtb3JlIHN1aXRhYmxlIGJ5IHRoZSBzb2Z0d2FyZS4KCiAgICAxLiBEaXNjYXJkZWQgaWYgdGFnIGlzIGFsdGVyZWQsIGRpc2NhcmRlZCBpZiBmaWxlIGlzIGFsdGVyZWQuCgogICAgICAgTm9uZS4KCiAgICAyLiBEaXNjYXJkZWQgaWYgdGFnIGlzIGFsdGVyZWQsIHByZXNlcnZlZCBpZiBmaWxlIGlzIGFsdGVyZWQuCgogICAgICAgTm9uZS4KCiAgICAzLiBQcmVzZXJ2ZWQgaWYgdGFnIGlzIGFsdGVyZWQsIGRpc2NhcmRlZCBpZiBmaWxlIGlzIGFsdGVyZWQuCgogICAgICAgQVNQSSwgQUVOQywgRVRDTywgRVFVMiwgTUxMVCwgUE9TUywgU0VFSywgU1lMVCwgU1lUQywgUlZBMiwgVEVOQywKICAgICAgIFRMRU4KCiAgICA0LiBQcmVzZXJ2ZWQgaWYgdGFnIGlzIGFsdGVyZWQsIHByZXNlcnZlZCBpZiBmaWxlIGlzIGFsdGVyZWQuCgogICAgICAgVGhlIHJlc3Qgb2YgdGhlIGZyYW1lcy4KCgo0LiAgIERlY2xhcmVkIElEM3YyIGZyYW1lcwoKICAgVGhlIGZvbGxvd2luZyBmcmFtZXMgYXJlIGRlY2xhcmVkIGluIHRoaXMgZHJhZnQuCgogIDQuMTkgIEFFTkMgQXVkaW8gZW5jcnlwdGlvbgogIDQuMTQgIEFQSUMgQXR0YWNoZWQgcGljdHVyZQogIDQuMzAgIEFTUEkgQXVkaW8gc2VlayBwb2ludCBpbmRleAoKICA0LjEwICBDT01NIENvbW1lbnRzCiAgNC4yNCAgQ09NUiBDb21tZXJjaWFsIGZyYW1lCgogIDQuMjUgIEVOQ1IgRW5jcnlwdGlvbiBtZXRob2QgcmVnaXN0cmF0aW9uCiAgNC4xMiAgRVFVMiBFcXVhbGlzYXRpb24gKDIpCiAgNC41ICAgRVRDTyBFdmVudCB0aW1pbmcgY29kZXMKCiAgNC4xNSAgR0VPQiBHZW5lcmFsIGVuY2Fwc3VsYXRlZCBvYmplY3QKICA0LjI2ICBHUklEIEdyb3VwIGlkZW50aWZpY2F0aW9uIHJlZ2lzdHJhdGlvbgoKICA0LjIwICBMSU5LIExpbmtlZCBpbmZvcm1hdGlvbgoKICA0LjQgICBNQ0RJIE11c2ljIENEIGlkZW50aWZpZXIKICA0LjYgICBNTExUIE1QRUcgbG9jYXRpb24gbG9va3VwIHRhYmxlCgogIDQuMjMgIE9XTkUgT3duZXJzaGlwIGZyYW1lCgogIDQuMjcgIFBSSVYgUHJpdmF0ZSBmcmFtZQogIDQuMTYgIFBDTlQgUGxheSBjb3VudGVyCiAgNC4xNyAgUE9QTSBQb3B1bGFyaW1ldGVyCiAgNC4yMSAgUE9TUyBQb3NpdGlvbiBzeW5jaHJvbmlzYXRpb24gZnJhbWUKCiAgNC4xOCAgUkJVRiBSZWNvbW1lbmRlZCBidWZmZXIgc2l6ZQogIDQuMTEgIFJWQTIgUmVsYXRpdmUgdm9sdW1lIGFkanVzdG1lbnQgKDIpCiAgNC4xMyAgUlZSQiBSZXZlcmIKCiAgNC4yOSAgU0VFSyBTZWVrIGZyYW1lCiAgNC4yOCAgU0lHTiBTaWduYXR1cmUgZnJhbWUKICA0LjkgICBTWUxUIFN5bmNocm9uaXNlZCBseXJpYy90ZXh0CiAgNC43ICAgU1lUQyBTeW5jaHJvbmlzZWQgdGVtcG8gY29kZXMKCiAgNC4yLjEgVEFMQiBBbGJ1bS9Nb3ZpZS9TaG93IHRpdGxlCiAgNC4yLjMgVEJQTSBCUE0gKGJlYXRzIHBlciBtaW51dGUpCiAgNC4yLjIgVENPTSBDb21wb3NlcgogIDQuMi4zIFRDT04gQ29udGVudCB0eXBlCiAgNC4yLjQgVENPUCBDb3B5cmlnaHQgbWVzc2FnZQogIDQuMi41IFRERU4gRW5jb2RpbmcgdGltZQogIDQuMi41IFRETFkgUGxheWxpc3QgZGVsYXkKICA0LjIuNSBURE9SIE9yaWdpbmFsIHJlbGVhc2UgdGltZQogIDQuMi41IFREUkMgUmVjb3JkaW5nIHRpbWUKICA0LjIuNSBURFJMIFJlbGVhc2UgdGltZQogIDQuMi41IFREVEcgVGFnZ2luZyB0aW1lCiAgNC4yLjIgVEVOQyBFbmNvZGVkIGJ5CiAgNC4yLjIgVEVYVCBMeXJpY2lzdC9UZXh0IHdyaXRlcgogIDQuMi4zIFRGTFQgRmlsZSB0eXBlCiAgNC4yLjIgVElQTCBJbnZvbHZlZCBwZW9wbGUgbGlzdAogIDQuMi4xIFRJVDEgQ29udGVudCBncm91cCBkZXNjcmlwdGlvbgogIDQuMi4xIFRJVDIgVGl0bGUvc29uZ25hbWUvY29udGVudCBkZXNjcmlwdGlvbgogIDQuMi4xIFRJVDMgU3VidGl0bGUvRGVzY3JpcHRpb24gcmVmaW5lbWVudAogIDQuMi4zIFRLRVkgSW5pdGlhbCBrZXkKICA0LjIuMyBUTEFOIExhbmd1YWdlKHMpCiAgNC4yLjMgVExFTiBMZW5ndGgKICA0LjIuMiBUTUNMIE11c2ljaWFuIGNyZWRpdHMgbGlzdAogIDQuMi4zIFRNRUQgTWVkaWEgdHlwZQogIDQuMi4zIFRNT08gTW9vZAogIDQuMi4xIFRPQUwgT3JpZ2luYWwgYWxidW0vbW92aWUvc2hvdyB0aXRsZQogIDQuMi41IFRPRk4gT3JpZ2luYWwgZmlsZW5hbWUKICA0LjIuMiBUT0xZIE9yaWdpbmFsIGx5cmljaXN0KHMpL3RleHQgd3JpdGVyKHMpCiAgNC4yLjIgVE9QRSBPcmlnaW5hbCBhcnRpc3QocykvcGVyZm9ybWVyKHMpCiAgNC4yLjQgVE9XTiBGaWxlIG93bmVyL2xpY2Vuc2VlCiAgNC4yLjIgVFBFMSBMZWFkIHBlcmZvcm1lcihzKS9Tb2xvaXN0KHMpCiAgNC4yLjIgVFBFMiBCYW5kL29yY2hlc3RyYS9hY2NvbXBhbmltZW50CiAgNC4yLjIgVFBFMyBDb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQKICA0LjIuMiBUUEU0IEludGVycHJldGVkLCByZW1peGVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgYnkKICA0LjIuMSBUUE9TIFBhcnQgb2YgYSBzZXQKICA0LjIuNCBUUFJPIFByb2R1Y2VkIG5vdGljZQogIDQuMi40IFRQVUIgUHVibGlzaGVyCiAgNC4yLjEgVFJDSyBUcmFjayBudW1iZXIvUG9zaXRpb24gaW4gc2V0CiAgNC4yLjQgVFJTTiBJbnRlcm5ldCByYWRpbyBzdGF0aW9uIG5hbWUKICA0LjIuNCBUUlNPIEludGVybmV0IHJhZGlvIHN0YXRpb24gb3duZXIKICA0LjIuNSBUU09BIEFsYnVtIHNvcnQgb3JkZXIKICA0LjIuNSBUU09QIFBlcmZvcm1lciBzb3J0IG9yZGVyCiAgNC4yLjUgVFNPVCBUaXRsZSBzb3J0IG9yZGVyCiAgNC4yLjEgVFNSQyBJU1JDIChpbnRlcm5hdGlvbmFsIHN0YW5kYXJkIHJlY29yZGluZyBjb2RlKQogIDQuMi41IFRTU0UgU29mdHdhcmUvSGFyZHdhcmUgYW5kIHNldHRpbmdzIHVzZWQgZm9yIGVuY29kaW5nCiAgNC4yLjEgVFNTVCBTZXQgc3VidGl0bGUKICA0LjIuMiBUWFhYIFVzZXIgZGVmaW5lZCB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lCgogIDQuMSAgIFVGSUQgVW5pcXVlIGZpbGUgaWRlbnRpZmllcgogIDQuMjIgIFVTRVIgVGVybXMgb2YgdXNlCiAgNC44ICAgVVNMVCBVbnN5bmNocm9uaXNlZCBseXJpYy90ZXh0IHRyYW5zY3JpcHRpb24KCiAgNC4zLjEgV0NPTSBDb21tZXJjaWFsIGluZm9ybWF0aW9uCiAgNC4zLjEgV0NPUCBDb3B5cmlnaHQvTGVnYWwgaW5mb3JtYXRpb24KICA0LjMuMSBXT0FGIE9mZmljaWFsIGF1ZGlvIGZpbGUgd2VicGFnZQogIDQuMy4xIFdPQVIgT2ZmaWNpYWwgYXJ0aXN0L3BlcmZvcm1lciB3ZWJwYWdlCiAgNC4zLjEgV09BUyBPZmZpY2lhbCBhdWRpbyBzb3VyY2Ugd2VicGFnZQogIDQuMy4xIFdPUlMgT2ZmaWNpYWwgSW50ZXJuZXQgcmFkaW8gc3RhdGlvbiBob21lcGFnZQogIDQuMy4xIFdQQVkgUGF5bWVudAogIDQuMy4xIFdQVUIgUHVibGlzaGVycyBvZmZpY2lhbCB3ZWJwYWdlCiAgNC4zLjIgV1hYWCBVc2VyIGRlZmluZWQgVVJMIGxpbmsgZnJhbWUKCgo0LjEuICAgVW5pcXVlIGZpbGUgaWRlbnRpZmllcgoKICAgVGhpcyBmcmFtZSdzIHB1cnBvc2UgaXMgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgYXVkaW8gZmlsZSBpbiBhCiAgIGRhdGFiYXNlLCB0aGF0IG1heSBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhlIGNvbnRlbnQuCiAgIFNpbmNlIHN0YW5kYXJkaXNhdGlvbiBvZiBzdWNoIGEgZGF0YWJhc2UgaXMgYmV5b25kIHRoaXMgZG9jdW1lbnQsIGFsbAogICBVRklEIGZyYW1lcyBiZWdpbiB3aXRoIGFuICdvd25lciBpZGVudGlmaWVyJyBmaWVsZC4gSXQgaXMgYSBudWxsLQogICB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEgVVJMIFtVUkxdIGNvbnRhaW5pbmcgYW4gZW1haWwgYWRkcmVzcywgb3IgYQogICBsaW5rIHRvIGEgbG9jYXRpb24gd2hlcmUgYW4gZW1haWwgYWRkcmVzcyBjYW4gYmUgZm91bmQsIHRoYXQgYmVsb25ncwogICB0byB0aGUgb3JnYW5pc2F0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNwZWNpZmljIGRhdGFiYXNlCiAgIGltcGxlbWVudGF0aW9uLiBRdWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBkYXRhYmFzZSBzaG91bGQgYmUgc2VudCB0bwogICB0aGUgaW5kaWNhdGVkIGVtYWlsIGFkZHJlc3MuIFRoZSBVUkwgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUKICAgYWN0dWFsIGRhdGFiYXNlIHF1ZXJpZXMuIFRoZSBzdHJpbmcKICAgImh0dHA6Ly93d3cuaWQzLm9yZy9kdW1teS91ZmlkLmh0bWwiIHNob3VsZCBiZSB1c2VkIGZvciB0ZXN0cy4gVGhlCiAgICdPd25lciBpZGVudGlmaWVyJyBtdXN0IGJlIG5vbi1lbXB0eSAobW9yZSB0aGFuIGp1c3QgYSB0ZXJtaW5hdGlvbikuCiAgIFRoZSAnT3duZXIgaWRlbnRpZmllcicgaXMgdGhlbiBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIGlkZW50aWZpZXIsCiAgIHdoaWNoIG1heSBiZSB1cCB0byA2NCBieXRlcy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIlVGSUQiIGZyYW1lCiAgIGluIGEgdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSAnT3duZXIgaWRlbnRpZmllcicuCgogICAgIDxIZWFkZXIgZm9yICdVbmlxdWUgZmlsZSBpZGVudGlmaWVyJywgSUQ6ICJVRklEIj4KICAgICBPd25lciBpZGVudGlmaWVyICAgICAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIElkZW50aWZpZXIgICAgICAgICAgICAgIDx1cCB0byA2NCBieXRlcyBiaW5hcnkgZGF0YT4KCgo0LjIuICAgVGV4dCBpbmZvcm1hdGlvbiBmcmFtZXMKCiAgIFRoZSB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lcyBhcmUgb2Z0ZW4gdGhlIG1vc3QgaW1wb3J0YW50IGZyYW1lcywKICAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBsaWtlIGFydGlzdCwgYWxidW0gYW5kIG1vcmUuIFRoZXJlIG1heSBvbmx5IGJlCiAgIG9uZSB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lIG9mIGl0cyBraW5kIGluIGFuIHRhZy4gQWxsIHRleHQKICAgaW5mb3JtYXRpb24gZnJhbWVzIHN1cHBvcnRzIG11bHRpcGxlIHN0cmluZ3MsIHN0b3JlZCBhcyBhIG51bGwKICAgc2VwYXJhdGVkIGxpc3QsIHdoZXJlIG51bGwgaXMgcmVwZXJlc2VudGVkIGJ5IHRoZSB0ZXJtaW5hdGlvbiBjb2RlCiAgIGZvciB0aGUgY2hhcmFjdGVyIGVuY29kaW5nLiBBbGwgdGV4dCBmcmFtZSBpZGVudGlmaWVycyBiZWdpbiB3aXRoICJUIi4KICAgT25seSB0ZXh0IGZyYW1lIGlkZW50aWZpZXJzIGJlZ2luIHdpdGggIlQiLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlCiAgICJUWFhYIiBmcmFtZS4gQWxsIHRoZSB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lcyBoYXZlIHRoZSBmb2xsb3dpbmcKICAgZm9ybWF0OgoKICAgICA8SGVhZGVyIGZvciAnVGV4dCBpbmZvcm1hdGlvbiBmcmFtZScsIElEOiAiVDAwMCIgLSAiVFpaWiIsCiAgICAgZXhjbHVkaW5nICJUWFhYIiBkZXNjcmliZWQgaW4gNC4yLjYuPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICAgICAgICAgJHh4CiAgICAgSW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICA8dGV4dCBzdHJpbmcocykgYWNjb3JkaW5nIHRvIGVuY29kaW5nPgoKCjQuMi4xLiAgIElkZW50aWZpY2F0aW9uIGZyYW1lcwoKICBUSVQxCiAgIFRoZSAnQ29udGVudCBncm91cCBkZXNjcmlwdGlvbicgZnJhbWUgaXMgdXNlZCBpZiB0aGUgc291bmQgYmVsb25ncyB0bwogICBhIGxhcmdlciBjYXRlZ29yeSBvZiBzb3VuZHMvbXVzaWMuIEZvciBleGFtcGxlLCBjbGFzc2ljYWwgbXVzaWMgaXMKICAgb2Z0ZW4gc29ydGVkIGluIGRpZmZlcmVudCBtdXNpY2FsIHNlY3Rpb25zIChlLmcuICJQaWFubyBDb25jZXJ0byIsCiAgICJXZWF0aGVyIC0gSHVycmljYW5lIikuCgogIFRJVDIKICAgVGhlICdUaXRsZS9Tb25nbmFtZS9Db250ZW50IGRlc2NyaXB0aW9uJyBmcmFtZSBpcyB0aGUgYWN0dWFsIG5hbWUgb2YKICAgdGhlIHBpZWNlIChlLmcuICJBZGFnaW8iLCAiSHVycmljYW5lIERvbm5hIikuCgogIFRJVDMKICAgVGhlICdTdWJ0aXRsZS9EZXNjcmlwdGlvbiByZWZpbmVtZW50JyBmcmFtZSBpcyB1c2VkIGZvciBpbmZvcm1hdGlvbgogICBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb250ZW50cyB0aXRsZSAoZS5nLiAiT3AuIDE2IiBvciAiUGVyZm9ybWVkCiAgIGxpdmUgYXQgV2VtYmxleSIpLgoKICBUQUxCCiAgIFRoZSAnQWxidW0vTW92aWUvU2hvdyB0aXRsZScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZSB0aXRsZSBvZiB0aGUKICAgcmVjb3JkaW5nIChvciBzb3VyY2Ugb2Ygc291bmQpIGZyb20gd2hpY2ggdGhlIGF1ZGlvIGluIHRoZSBmaWxlIGlzCiAgIHRha2VuLgoKICBUT0FMCiAgIFRoZSAnT3JpZ2luYWwgYWxidW0vbW92aWUvc2hvdyB0aXRsZScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZSB0aXRsZQogICBvZiB0aGUgb3JpZ2luYWwgcmVjb3JkaW5nIChvciBzb3VyY2Ugb2Ygc291bmQpLCBpZiBmb3IgZXhhbXBsZSB0aGUKICAgbXVzaWMgaW4gdGhlIGZpbGUgc2hvdWxkIGJlIGEgY292ZXIgb2YgYSBwcmV2aW91c2x5IHJlbGVhc2VkIHNvbmcuCgogIFRSQ0sKICAgVGhlICdUcmFjayBudW1iZXIvUG9zaXRpb24gaW4gc2V0JyBmcmFtZSBpcyBhIG51bWVyaWMgc3RyaW5nCiAgIGNvbnRhaW5pbmcgdGhlIG9yZGVyIG51bWJlciBvZiB0aGUgYXVkaW8tZmlsZSBvbiBpdHMgb3JpZ2luYWwKICAgcmVjb3JkaW5nLiBUaGlzIE1BWSBiZSBleHRlbmRlZCB3aXRoIGEgIi8iIGNoYXJhY3RlciBhbmQgYSBudW1lcmljCiAgIHN0cmluZyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgdHJhY2tzL2VsZW1lbnRzIG9uIHRoZSBvcmlnaW5hbAogICByZWNvcmRpbmcuIEUuZy4gIjQvOSIuCgogIFRQT1MKICAgVGhlICdQYXJ0IG9mIGEgc2V0JyBmcmFtZSBpcyBhIG51bWVyaWMgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHdoaWNoCiAgIHBhcnQgb2YgYSBzZXQgdGhlIGF1ZGlvIGNhbWUgZnJvbS4gVGhpcyBmcmFtZSBpcyB1c2VkIGlmIHRoZSBzb3VyY2UKICAgZGVzY3JpYmVkIGluIHRoZSAiVEFMQiIgZnJhbWUgaXMgZGl2aWRlZCBpbnRvIHNldmVyYWwgbWVkaXVtcywgZS5nLiBhCiAgIGRvdWJsZSBDRC4gVGhlIHZhbHVlIE1BWSBiZSBleHRlbmRlZCB3aXRoIGEgIi8iIGNoYXJhY3RlciBhbmQgYQogICBudW1lcmljIHN0cmluZyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFydHMgaW4gdGhlIHNldC4gRS5nLgogICAiMS8yIi4KCiAgVFNTVAogICBUaGUgJ1NldCBzdWJ0aXRsZScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZSBzdWJ0aXRsZSBvZiB0aGUgcGFydCBvZgogICBhIHNldCB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8uCgogIFRTUkMKICAgVGhlICdJU1JDJyBmcmFtZSBzaG91bGQgY29udGFpbiB0aGUgSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcKICAgQ29kZSBbSVNSQ10gKDEyIGNoYXJhY3RlcnMpLgoKCjQuMi4yLiAgIEludm9sdmVkIHBlcnNvbnMgZnJhbWVzCgogIFRQRTEKICAgVGhlICdMZWFkIGFydGlzdC9MZWFkIHBlcmZvcm1lci9Tb2xvaXN0L1BlcmZvcm1pbmcgZ3JvdXAnIGlzCiAgIHVzZWQgZm9yIHRoZSBtYWluIGFydGlzdC4KCiAgVFBFMgogICBUaGUgJ0JhbmQvT3JjaGVzdHJhL0FjY29tcGFuaW1lbnQnIGZyYW1lIGlzIHVzZWQgZm9yIGFkZGl0aW9uYWwKICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcmZvcm1lcnMgaW4gdGhlIHJlY29yZGluZy4KCiAgVFBFMwogICBUaGUgJ0NvbmR1Y3RvcicgZnJhbWUgaXMgdXNlZCBmb3IgdGhlIG5hbWUgb2YgdGhlIGNvbmR1Y3Rvci4KCiAgVFBFNAogICBUaGUgJ0ludGVycHJldGVkLCByZW1peGVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgYnknIGZyYW1lIGNvbnRhaW5zCiAgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhcgogICBpbnRlcnByZXRhdGlvbnMgb2YgYW5vdGhlciBleGlzdGluZyBwaWVjZS4KCiAgVE9QRQogICBUaGUgJ09yaWdpbmFsIGFydGlzdC9wZXJmb3JtZXInIGZyYW1lIGlzIGludGVuZGVkIGZvciB0aGUgcGVyZm9ybWVyCiAgIG9mIHRoZSBvcmlnaW5hbCByZWNvcmRpbmcsIGlmIGZvciBleGFtcGxlIHRoZSBtdXNpYyBpbiB0aGUgZmlsZQogICBzaG91bGQgYmUgYSBjb3ZlciBvZiBhIHByZXZpb3VzbHkgcmVsZWFzZWQgc29uZy4KCiAgVEVYVAogICBUaGUgJ0x5cmljaXN0L1RleHQgd3JpdGVyJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlIHdyaXRlciBvZiB0aGUKICAgdGV4dCBvciBseXJpY3MgaW4gdGhlIHJlY29yZGluZy4KCiAgVE9MWQogICBUaGUgJ09yaWdpbmFsIGx5cmljaXN0L3RleHQgd3JpdGVyJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlCiAgIHRleHQgd3JpdGVyIG9mIHRoZSBvcmlnaW5hbCByZWNvcmRpbmcsIGlmIGZvciBleGFtcGxlIHRoZSBtdXNpYyBpbgogICB0aGUgZmlsZSBzaG91bGQgYmUgYSBjb3ZlciBvZiBhIHByZXZpb3VzbHkgcmVsZWFzZWQgc29uZy4KCiAgVENPTQogICBUaGUgJ0NvbXBvc2VyJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlIG5hbWUgb2YgdGhlIGNvbXBvc2VyLgoKICBUTUNMCiAgIFRoZSAnTXVzaWNpYW4gY3JlZGl0cyBsaXN0JyBpcyBpbnRlbmRlZCBhcyBhIG1hcHBpbmcgYmV0d2VlbgogICBpbnN0cnVtZW50cyBhbmQgdGhlIG11c2ljaWFuIHRoYXQgcGxheWVkIGl0LiBFdmVyeSBvZGQgZmllbGQgaXMgYW4KICAgaW5zdHJ1bWVudCBhbmQgZXZlcnkgZXZlbiBpcyBhbiBhcnRpc3Qgb3IgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZgogICBhcnRpc3RzLgoKICBUSVBMCiAgIFRoZSAnSW52b2x2ZWQgcGVvcGxlIGxpc3QnIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgbXVzaWNpYW4gY3JlZGl0cwogICBsaXN0LCBidXQgbWFwcyBiZXR3ZWVuIGZ1bmN0aW9ucywgbGlrZSBwcm9kdWNlciwgYW5kIG5hbWVzLgoKICBURU5DCiAgIFRoZSAnRW5jb2RlZCBieScgZnJhbWUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBvcgogICBvcmdhbmlzYXRpb24gdGhhdCBlbmNvZGVkIHRoZSBhdWRpbyBmaWxlLiBUaGlzIGZpZWxkIG1heSBjb250YWluIGEKICAgY29weXJpZ2h0IG1lc3NhZ2UsIGlmIHRoZSBhdWRpbyBmaWxlIGFsc28gaXMgY29weXJpZ2h0ZWQgYnkgdGhlCiAgIGVuY29kZXIuCgoKNC4yLjMuICAgRGVyaXZlZCBhbmQgc3ViamVjdGl2ZSBwcm9wZXJ0aWVzIGZyYW1lcwoKICBUQlBNCiAgIFRoZSAnQlBNJyBmcmFtZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gdGhlCiAgIG1haW4gcGFydCBvZiB0aGUgYXVkaW8uIFRoZSBCUE0gaXMgYW4gaW50ZWdlciBhbmQgcmVwcmVzZW50ZWQgYXMgYQogICBudW1lcmljYWwgc3RyaW5nLgoKICBUTEVOCiAgIFRoZSAnTGVuZ3RoJyBmcmFtZSBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBhdWRpbyBmaWxlIGluCiAgIG1pbGxpc2Vjb25kcywgcmVwcmVzZW50ZWQgYXMgYSBudW1lcmljIHN0cmluZy4KCiAgVEtFWQogICBUaGUgJ0luaXRpYWwga2V5JyBmcmFtZSBjb250YWlucyB0aGUgbXVzaWNhbCBrZXkgaW4gd2hpY2ggdGhlIHNvdW5kCiAgIHN0YXJ0cy4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgd2l0aCBhIG1heGltdW0gbGVuZ3RoIG9mIHRocmVlCiAgIGNoYXJhY3RlcnMuIFRoZSBncm91bmQga2V5cyBhcmUgcmVwcmVzZW50ZWQgd2l0aCAiQSIsIkIiLCJDIiwiRCIsIkUiLAogICAiRiIgYW5kICJHIiBhbmQgaGFsZmtleXMgcmVwcmVzZW50ZWQgd2l0aCAiYiIgYW5kICIjIi4gTWlub3IgaXMKICAgcmVwcmVzZW50ZWQgYXMgIm0iLCBlLmcuICJEYm0iICQwMC4gT2ZmIGtleSBpcyByZXByZXNlbnRlZCB3aXRoIGFuCiAgICJvIiBvbmx5LgoKICBUTEFOCiAgIFRoZSAnTGFuZ3VhZ2UnIGZyYW1lIHNob3VsZCBjb250YWluIHRoZSBsYW5ndWFnZXMgb2YgdGhlIHRleHQgb3IKICAgbHlyaWNzIHNwb2tlbiBvciBzdW5nIGluIHRoZSBhdWRpby4gVGhlIGxhbmd1YWdlIGlzIHJlcHJlc2VudGVkIHdpdGgKICAgdGhyZWUgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gSVNPLTYzOS0yIFtJU08tNjM5LTJdLiBJZiBtb3JlIHRoYW4gb25lCiAgIGxhbmd1YWdlIGlzIHVzZWQgaW4gdGhlIHRleHQgdGhlaXIgbGFuZ3VhZ2UgY29kZXMgc2hvdWxkIGZvbGxvdwogICBhY2NvcmRpbmcgdG8gdGhlIGFtb3VudCBvZiB0aGVpciB1c2FnZSwgZS5nLiAiZW5nIiAkMDAgInN2ZSIgJDAwLgoKICBUQ09OCiAgIFRoZSAnQ29udGVudCB0eXBlJywgd2hpY2ggSUQzdjEgd2FzIHN0b3JlZCBhcyBhIG9uZSBieXRlIG51bWVyaWMKICAgdmFsdWUgb25seSwgaXMgbm93IGEgc3RyaW5nLiBZb3UgbWF5IHVzZSBvbmUgb3Igc2V2ZXJhbCBvZiB0aGUgSUQzdjEKICAgdHlwZXMgYXMgbnVtZXJpY2FsIHN0cmluZ3MsIG9yLCBzaW5jZSB0aGUgY2F0ZWdvcnkgbGlzdCB3b3VsZCBiZQogICBpbXBvc3NpYmxlIHRvIG1haW50YWluIHdpdGggYWNjdXJhdGUgYW5kIHVwIHRvIGRhdGUgY2F0ZWdvcmllcywKICAgZGVmaW5lIHlvdXIgb3duLiBFeGFtcGxlOiAiMjEiICQwMCAiRXVyb2Rpc2NvIiAkMDAKCiAgIFlvdSBtYXkgYWxzbyB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcga2V5d29yZHM6CiAgIAogICAgIFJYICBSZW1peAogICAgIENSICBDb3ZlcgoKICBURkxUCiAgIFRoZSAnRmlsZSB0eXBlJyBmcmFtZSBpbmRpY2F0ZXMgd2hpY2ggdHlwZSBvZiBhdWRpbyB0aGlzIHRhZyBkZWZpbmVzLgogICBUaGUgZm9sbG93aW5nIHR5cGVzIGFuZCByZWZpbmVtZW50cyBhcmUgZGVmaW5lZDoKCiAgICAgTUlNRSAgIE1JTUUgdHlwZSBmb2xsb3dzCiAgICAgTVBHICAgIE1QRUcgQXVkaW8KICAgICAgIC8xICAgICBNUEVHIDEvMiBsYXllciBJCiAgICAgICAvMiAgICAgTVBFRyAxLzIgbGF5ZXIgSUkKICAgICAgIC8zICAgICBNUEVHIDEvMiBsYXllciBJSUkKICAgICAgIC8yLjUgICBNUEVHIDIuNQogICAgICAgL0FBQyAgIEFkdmFuY2VkIGF1ZGlvIGNvbXByZXNzaW9uCiAgICAgVlFGICAgIFRyYW5zZm9ybS1kb21haW4gV2VpZ2h0ZWQgSW50ZXJsZWF2ZSBWZWN0b3IgUXVhbnRpc2F0aW9uCiAgICAgUENNICAgIFB1bHNlIENvZGUgTW9kdWxhdGVkIGF1ZGlvCgogICBidXQgb3RoZXIgdHlwZXMgbWF5IGJlIHVzZWQsIGJ1dCBub3QgZm9yIHRoZXNlIHR5cGVzIHRob3VnaC4gVGhpcyBpcwogICB1c2VkIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIHByZWRlZmluZWQgdHlwZXMgaW4gdGhlICJUTUVEIiBmcmFtZSwKICAgYnV0IHdpdGhvdXQgcGFyZW50aGVzZXMuIElmIHRoaXMgZnJhbWUgaXMgbm90IHByZXNlbnQgYXVkaW8gdHlwZSBpcwogICBhc3N1bWVkIHRvIGJlICJNUEciLgoKICBUTUVECiAgIFRoZSAnTWVkaWEgdHlwZScgZnJhbWUgZGVzY3JpYmVzIGZyb20gd2hpY2ggbWVkaWEgdGhlIHNvdW5kCiAgIG9yaWdpbmF0ZWQuIFRoaXMgbWF5IGJlIGEgdGV4dCBzdHJpbmcgb3IgYSByZWZlcmVuY2UgdG8gdGhlCiAgIHByZWRlZmluZWQgbWVkaWEgdHlwZXMgZm91bmQgaW4gdGhlIGxpc3QgYmVsb3cuIEV4YW1wbGU6CiAgICJWSUQvUEFML1ZIUyIgJDAwLgoKICAgIERJRyAgICBPdGhlciBkaWdpdGFsIG1lZGlhCiAgICAgIC9BICAgIEFuYWxvZ3VlIHRyYW5zZmVyIGZyb20gbWVkaWEKCiAgICBBTkEgICAgT3RoZXIgYW5hbG9ndWUgbWVkaWEKICAgICAgL1dBQyAgV2F4IGN5bGluZGVyCiAgICAgIC84Q0EgIDgtdHJhY2sgdGFwZSBjYXNzZXR0ZQoKICAgIENEICAgICBDRAogICAgICAvQSAgICBBbmFsb2d1ZSB0cmFuc2ZlciBmcm9tIG1lZGlhCiAgICAgIC9ERCAgIERERAogICAgICAvQUQgICBBREQKICAgICAgL0FBICAgQUFECgogICAgTEQgICAgIExhc2VyZGlzYwoKICAgIFRUICAgICBUdXJudGFibGUgcmVjb3JkcwogICAgICAvMzMgICAgMzMuMzMgcnBtCiAgICAgIC80NSAgICA0NSBycG0KICAgICAgLzcxICAgIDcxLjI5IHJwbQogICAgICAvNzYgICAgNzYuNTkgcnBtCiAgICAgIC83OCAgICA3OC4yNiBycG0KICAgICAgLzgwICAgIDgwIHJwbQoKICAgIE1EICAgICBNaW5pRGlzYwogICAgICAvQSAgICBBbmFsb2d1ZSB0cmFuc2ZlciBmcm9tIG1lZGlhCgogICAgREFUICAgIERBVAogICAgICAvQSAgICBBbmFsb2d1ZSB0cmFuc2ZlciBmcm9tIG1lZGlhCiAgICAgIC8xICAgIHN0YW5kYXJkLCA0OCBrSHovMTYgYml0cywgbGluZWFyCiAgICAgIC8yICAgIG1vZGUgMiwgMzIga0h6LzE2IGJpdHMsIGxpbmVhcgogICAgICAvMyAgICBtb2RlIDMsIDMyIGtIei8xMiBiaXRzLCBub24tbGluZWFyLCBsb3cgc3BlZWQKICAgICAgLzQgICAgbW9kZSA0LCAzMiBrSHovMTIgYml0cywgNCBjaGFubmVscwogICAgICAvNSAgICBtb2RlIDUsIDQ0LjEga0h6LzE2IGJpdHMsIGxpbmVhcgogICAgICAvNiAgICBtb2RlIDYsIDQ0LjEga0h6LzE2IGJpdHMsICd3aWRlIHRyYWNrJyBwbGF5CgogICAgRENDICAgIERDQwogICAgICAvQSAgICBBbmFsb2d1ZSB0cmFuc2ZlciBmcm9tIG1lZGlhCgogICAgRFZEICAgIERWRAogICAgICAvQSAgICBBbmFsb2d1ZSB0cmFuc2ZlciBmcm9tIG1lZGlhCgogICAgVFYgICAgIFRlbGV2aXNpb24KICAgICAgL1BBTCAgICBQQUwKICAgICAgL05UU0MgICBOVFNDCiAgICAgIC9TRUNBTSAgU0VDQU0KCiAgICBWSUQgICAgVmlkZW8KICAgICAgL1BBTCAgICBQQUwKICAgICAgL05UU0MgICBOVFNDCiAgICAgIC9TRUNBTSAgU0VDQU0KICAgICAgL1ZIUyAgICBWSFMKICAgICAgL1NWSFMgICBTLVZIUwogICAgICAvQkVUQSAgIEJFVEFNQVgKCiAgICBSQUQgICAgUmFkaW8KICAgICAgL0ZNICAgRk0KICAgICAgL0FNICAgQU0KICAgICAgL0xXICAgTFcKICAgICAgL01XICAgTVcKCiAgICBURUwgICAgVGVsZXBob25lCiAgICAgIC9JICAgIElTRE4KCiAgICBNQyAgICAgTUMgKG5vcm1hbCBjYXNzZXR0ZSkKICAgICAgLzQgICAgNC43NSBjbS9zIChub3JtYWwgc3BlZWQgZm9yIGEgdHdvIHNpZGVkIGNhc3NldHRlKQogICAgICAvOSAgICA5LjUgY20vcwogICAgICAvSSAgICBUeXBlIEkgY2Fzc2V0dGUgKGZlcnJpYy9ub3JtYWwpCiAgICAgIC9JSSAgIFR5cGUgSUkgY2Fzc2V0dGUgKGNocm9tZSkKICAgICAgL0lJSSAgVHlwZSBJSUkgY2Fzc2V0dGUgKGZlcnJpYyBjaHJvbWUpCiAgICAgIC9JViAgIFR5cGUgSVYgY2Fzc2V0dGUgKG1ldGFsKQoKICAgIFJFRSAgICBSZWVsCiAgICAgIC85ICAgIDkuNSBjbS9zCiAgICAgIC8xOSAgIDE5IGNtL3MKICAgICAgLzM4ICAgMzggY20vcwogICAgICAvNzYgICA3NiBjbS9zCiAgICAgIC9JICAgIFR5cGUgSSBjYXNzZXR0ZSAoZmVycmljL25vcm1hbCkKICAgICAgL0lJICAgVHlwZSBJSSBjYXNzZXR0ZSAoY2hyb21lKQogICAgICAvSUlJICBUeXBlIElJSSBjYXNzZXR0ZSAoZmVycmljIGNocm9tZSkKICAgICAgL0lWICAgVHlwZSBJViBjYXNzZXR0ZSAobWV0YWwpCgogIFRNT08KICAgVGhlICdNb29kJyBmcmFtZSBpcyBpbnRlbmRlZCB0byByZWZsZWN0IHRoZSBtb29kIG9mIHRoZSBhdWRpbyB3aXRoIGEKICAgZmV3IGtleXdvcmRzLCBlLmcuICJSb21hbnRpYyIgb3IgIlNhZCIuCgoKNC4yLjQuICAgUmlnaHRzIGFuZCBsaWNlbnNlIGZyYW1lcwoKICBUQ09QCiAgIFRoZSAnQ29weXJpZ2h0IG1lc3NhZ2UnIGZyYW1lLCBpbiB3aGljaCB0aGUgc3RyaW5nIG11c3QgYmVnaW4gd2l0aCBhCiAgIHllYXIgYW5kIGEgc3BhY2UgY2hhcmFjdGVyIChtYWtpbmcgZml2ZSBjaGFyYWN0ZXJzKSwgaXMgaW50ZW5kZWQgZm9yCiAgIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBvcmlnaW5hbCBzb3VuZCwgbm90IHRoZSBhdWRpbyBmaWxlCiAgIGl0c2VsZi4gVGhlIGFic2VuY2Ugb2YgdGhpcyBmcmFtZSBtZWFucyBvbmx5IHRoYXQgdGhlIGNvcHlyaWdodAogICBpbmZvcm1hdGlvbiBpcyB1bmF2YWlsYWJsZSBvciBoYXMgYmVlbiByZW1vdmVkLCBhbmQgbXVzdCBub3QgYmUKICAgaW50ZXJwcmV0ZWQgdG8gbWVhbiB0aGF0IHRoZSBhdWRpbyBpcyBwdWJsaWMgZG9tYWluLiBFdmVyeSB0aW1lIHRoaXMKICAgZmllbGQgaXMgZGlzcGxheWVkIHRoZSBmaWVsZCBtdXN0IGJlIHByZWNlZGVkIHdpdGggIkNvcHlyaWdodCAiIChDKSAiCiAgICIsIHdoZXJlIChDKSBpcyBvbmUgY2hhcmFjdGVyIHNob3dpbmcgYSBDIGluIGEgY2lyY2xlLgoKICBUUFJPCiAgIFRoZSAnUHJvZHVjZWQgbm90aWNlJyBmcmFtZSwgaW4gd2hpY2ggdGhlIHN0cmluZyBtdXN0IGJlZ2luIHdpdGggYQogICB5ZWFyIGFuZCBhIHNwYWNlIGNoYXJhY3RlciAobWFraW5nIGZpdmUgY2hhcmFjdGVycyksIGlzIGludGVuZGVkIGZvcgogICB0aGUgcHJvZHVjdGlvbiBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBvcmlnaW5hbCBzb3VuZCwgbm90IHRoZSBhdWRpbwogICBmaWxlIGl0c2VsZi4gVGhlIGFic2VuY2Ugb2YgdGhpcyBmcmFtZSBtZWFucyBvbmx5IHRoYXQgdGhlIHByb2R1Y3Rpb24KICAgY29weXJpZ2h0IGluZm9ybWF0aW9uIGlzIHVuYXZhaWxhYmxlIG9yIGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBtdXN0CiAgIG5vdCBiZSBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlIGF1ZGlvIGlzIHB1YmxpYyBkb21haW4uIEV2ZXJ5CiAgIHRpbWUgdGhpcyBmaWVsZCBpcyBkaXNwbGF5ZWQgdGhlIGZpZWxkIG11c3QgYmUgcHJlY2VkZWQgd2l0aAogICAiUHJvZHVjZWQgIiAoUCkgIiAiLCB3aGVyZSAoUCkgaXMgb25lIGNoYXJhY3RlciBzaG93aW5nIGEgUCBpbiBhCiAgIGNpcmNsZS4KCiAgVFBVQgogICBUaGUgJ1B1Ymxpc2hlcicgZnJhbWUgc2ltcGx5IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBsYWJlbCBvcgogICBwdWJsaXNoZXIuCgogIFRPV04KICAgVGhlICdGaWxlIG93bmVyL2xpY2Vuc2VlJyBmcmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgb3duZXIgb3IKICAgbGljZW5zZWUgb2YgdGhlIGZpbGUgYW5kIGl0J3MgY29udGVudHMuCgogIFRSU04KICAgVGhlICdJbnRlcm5ldCByYWRpbyBzdGF0aW9uIG5hbWUnIGZyYW1lIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZQogICBpbnRlcm5ldCByYWRpbyBzdGF0aW9uIGZyb20gd2hpY2ggdGhlIGF1ZGlvIGlzIHN0cmVhbWVkLgoKICBUUlNPCiAgIFRoZSAnSW50ZXJuZXQgcmFkaW8gc3RhdGlvbiBvd25lcicgZnJhbWUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlCiAgIG93bmVyIG9mIHRoZSBpbnRlcm5ldCByYWRpbyBzdGF0aW9uIGZyb20gd2hpY2ggdGhlIGF1ZGlvIGlzCiAgIHN0cmVhbWVkLgoKNC4yLjUuICAgT3RoZXIgdGV4dCBmcmFtZXMKCiAgVE9GTgogICBUaGUgJ09yaWdpbmFsIGZpbGVuYW1lJyBmcmFtZSBjb250YWlucyB0aGUgcHJlZmVycmVkIGZpbGVuYW1lIGZvciB0aGUKICAgZmlsZSwgc2luY2Ugc29tZSBtZWRpYSBkb2Vzbid0IGFsbG93IHRoZSBkZXNpcmVkIGxlbmd0aCBvZiB0aGUKICAgZmlsZW5hbWUuIFRoZSBmaWxlbmFtZSBpcyBjYXNlIHNlbnNpdGl2ZSBhbmQgaW5jbHVkZXMgaXRzIHN1ZmZpeC4KCiAgVERMWQogICBUaGUgJ1BsYXlsaXN0IGRlbGF5JyBkZWZpbmVzIHRoZSBudW1iZXJzIG9mIG1pbGxpc2Vjb25kcyBvZiBzaWxlbmNlCiAgIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGJlZm9yZSB0aGlzIGF1ZGlvLiBUaGUgdmFsdWUgemVybyBpbmRpY2F0ZXMKICAgdGhhdCB0aGlzIGlzIGEgcGFydCBvZiBhIG11bHRpZmlsZSBhdWRpbyB0cmFjayB0aGF0IHNob3VsZCBiZSBwbGF5ZWQKICAgY29udGludW91c2x5LgoKICBUREVOCiAgIFRoZSAnRW5jb2RpbmcgdGltZScgZnJhbWUgY29udGFpbnMgYSB0aW1lc3RhbXAgZGVzY3JpYmluZyB3aGVuIHRoZQogICBhdWRpbyB3YXMgZW5jb2RlZC4gVGltZXN0YW1wIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIElEM3YyCiAgIHN0cnVjdHVyZSBkb2N1bWVudCBbSUQzdjItc3RyY3RdLgoKICBURE9SCiAgIFRoZSAnT3JpZ2luYWwgcmVsZWFzZSB0aW1lJyBmcmFtZSBjb250YWlucyBhIHRpbWVzdGFtcCBkZXNjcmliaW5nCiAgIHdoZW4gdGhlIG9yaWdpbmFsIHJlY29yZGluZyBvZiB0aGUgYXVkaW8gd2FzIHJlbGVhc2VkLiBUaW1lc3RhbXAKICAgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgSUQzdjIgc3RydWN0dXJlIGRvY3VtZW50IFtJRDN2Mi1zdHJjdF0uCgogIFREUkMKICAgVGhlICdSZWNvcmRpbmcgdGltZScgZnJhbWUgY29udGFpbnMgYSB0aW1lc3RhbXAgZGVzY3JpYmluZyB3aGVuIHRoZQogICBhdWRpbyB3YXMgcmVjb3JkZWQuIFRpbWVzdGFtcCBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBJRDN2MgogICBzdHJ1Y3R1cmUgZG9jdW1lbnQgW0lEM3YyLXN0cmN0XS4KCiAgVERSTAogICBUaGUgJ1JlbGVhc2UgdGltZScgZnJhbWUgY29udGFpbnMgYSB0aW1lc3RhbXAgZGVzY3JpYmluZyB3aGVuIHRoZQogICBhdWRpbyB3YXMgZmlyc3QgcmVsZWFzZWQuIFRpbWVzdGFtcCBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBJRDN2MgogICBzdHJ1Y3R1cmUgZG9jdW1lbnQgW0lEM3YyLXN0cmN0XS4KCiAgVERURwogICBUaGUgJ1RhZ2dpbmcgdGltZScgZnJhbWUgY29udGFpbnMgYSB0aW1lc3RhbXAgZGVzY3JpYmluZyB0aGVuIHRoZQogICBhdWRpbyB3YXMgdGFnZ2VkLiBUaW1lc3RhbXAgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgSUQzdjIKICAgc3RydWN0dXJlIGRvY3VtZW50IFtJRDN2Mi1zdHJjdF0uCgogIFRTU0UKICAgVGhlICdTb2Z0d2FyZS9IYXJkd2FyZSBhbmQgc2V0dGluZ3MgdXNlZCBmb3IgZW5jb2RpbmcnIGZyYW1lCiAgIGluY2x1ZGVzIHRoZSB1c2VkIGF1ZGlvIGVuY29kZXIgYW5kIGl0cyBzZXR0aW5ncyB3aGVuIHRoZSBmaWxlIHdhcwogICBlbmNvZGVkLiBIYXJkd2FyZSByZWZlcnMgdG8gaGFyZHdhcmUgZW5jb2RlcnMsIG5vdCB0aGUgY29tcHV0ZXIgb24KICAgd2hpY2ggYSBwcm9ncmFtIHdhcyBydW4uCgogIFRTT0EKICAgVGhlICdBbGJ1bSBzb3J0IG9yZGVyJyBmcmFtZSBkZWZpbmVzIGEgc3RyaW5nIHdoaWNoIHNob3VsZCBiZSB1c2VkCiAgIGluc3RlYWQgb2YgdGhlIGFsYnVtIG5hbWUgKFRBTEIpIGZvciBzb3J0aW5nIHB1cnBvc2VzLiBFLmcuIGFuIGFsYnVtCiAgIG5hbWVkICJBIFNvdW5kdHJhY2siIG1pZ2h0IHByZWZlcmFibHkgYmUgc29ydGVkIGFzICJTb3VuZHRyYWNrIi4KCiAgVFNPUAogICBUaGUgJ1BlcmZvcm1lciBzb3J0IG9yZGVyJyBmcmFtZSBkZWZpbmVzIGEgc3RyaW5nIHdoaWNoIHNob3VsZCBiZQogICB1c2VkIGluc3RlYWQgb2YgdGhlIHBlcmZvcm1lciAoVFBFMikgZm9yIHNvcnRpbmcgcHVycG9zZXMuCgogIFRTT1QKICAgVGhlICdUaXRsZSBzb3J0IG9yZGVyJyBmcmFtZSBkZWZpbmVzIGEgc3RyaW5nIHdoaWNoIHNob3VsZCBiZSB1c2VkCiAgIGluc3RlYWQgb2YgdGhlIHRpdGxlIChUSVQyKSBmb3Igc29ydGluZyBwdXJwb3Nlcy4KCgo0LjIuNi4gICBVc2VyIGRlZmluZWQgdGV4dCBpbmZvcm1hdGlvbiBmcmFtZQoKICAgVGhpcyBmcmFtZSBpcyBpbnRlbmRlZCBmb3Igb25lLXN0cmluZyB0ZXh0IGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlCiAgIGF1ZGlvIGZpbGUgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgb3RoZXIgIlQiLWZyYW1lcy4gVGhlIGZyYW1lIGJvZHkKICAgY29uc2lzdHMgb2YgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyaW5nLCByZXByZXNlbnRlZCBhcyBhIHRlcm1pbmF0ZWQKICAgc3RyaW5nLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIHN0cmluZy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUKICAgIlRYWFgiIGZyYW1lIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSBkZXNjcmlwdGlvbi4KCiAgICAgPEhlYWRlciBmb3IgJ1VzZXIgZGVmaW5lZCB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lJywgSUQ6ICJUWFhYIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAkeHgKICAgICBEZXNjcmlwdGlvbiAgICAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQogICAgIFZhbHVlICAgICAgICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC4zLiAgIFVSTCBsaW5rIGZyYW1lcwoKICAgV2l0aCB0aGVzZSBmcmFtZXMgZHluYW1pYyBkYXRhIHN1Y2ggYXMgd2VicGFnZXMgd2l0aCB0b3VyaW5nCiAgIGluZm9ybWF0aW9uLCBwcmljZSBpbmZvcm1hdGlvbiBvciBwbGFpbiBvcmRpbmFyeSBuZXdzIGNhbiBiZSBhZGRlZCB0bwogICB0aGUgdGFnLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgVVJMIFtVUkxdIGxpbmsgZnJhbWUgb2YgaXRzIGtpbmQgaW4gYW4KICAgdGFnLCBleGNlcHQgd2hlbiBzdGF0ZWQgb3RoZXJ3aXNlIGluIHRoZSBmcmFtZSBkZXNjcmlwdGlvbi4gSWYgdGhlCiAgIHRleHQgc3RyaW5nIGlzIGZvbGxvd2VkIGJ5IGEgc3RyaW5nIHRlcm1pbmF0aW9uLCBhbGwgdGhlIGZvbGxvd2luZwogICBpbmZvcm1hdGlvbiBzaG91bGQgYmUgaWdub3JlZCBhbmQgbm90IGJlIGRpc3BsYXllZC4gQWxsIFVSTCBsaW5rCiAgIGZyYW1lIGlkZW50aWZpZXJzIGJlZ2lucyB3aXRoICJXIi4gT25seSBVUkwgbGluayBmcmFtZSBpZGVudGlmaWVycwogICBiZWdpbnMgd2l0aCAiVyIsIGV4Y2VwdCBmb3IgIldYWFgiLiBBbGwgVVJMIGxpbmsgZnJhbWVzIGhhdmUgdGhlCiAgIGZvbGxvd2luZyBmb3JtYXQ6CgogICAgIDxIZWFkZXIgZm9yICdVUkwgbGluayBmcmFtZScsIElEOiAiVzAwMCIgLSAiV1paWiIsIGV4Y2x1ZGluZyAiV1hYWCIKICAgICBkZXNjcmliZWQgaW4gNC4zLjIuPgogICAgIFVSTCAgICAgICAgICAgICAgPHRleHQgc3RyaW5nPgoKCjQuMy4xLiAgIFVSTCBsaW5rIGZyYW1lcyAtIGRldGFpbHMKCiAgV0NPTQogICBUaGUgJ0NvbW1lcmNpYWwgaW5mb3JtYXRpb24nIGZyYW1lIGlzIGEgVVJMIHBvaW50aW5nIGF0IGEgd2VicGFnZQogICB3aXRoIGluZm9ybWF0aW9uIHN1Y2ggYXMgd2hlcmUgdGhlIGFsYnVtIGNhbiBiZSBib3VnaHQuIFRoZXJlIG1heSBiZQogICBtb3JlIHRoYW4gb25lICJXQ09NIiBmcmFtZSBpbiBhIHRhZywgYnV0IG5vdCB3aXRoIHRoZSBzYW1lIGNvbnRlbnQuCgogIFdDT1AKICAgVGhlICdDb3B5cmlnaHQvTGVnYWwgaW5mb3JtYXRpb24nIGZyYW1lIGlzIGEgVVJMIHBvaW50aW5nIGF0IGEKICAgd2VicGFnZSB3aGVyZSB0aGUgdGVybXMgb2YgdXNlIGFuZCBvd25lcnNoaXAgb2YgdGhlIGZpbGUgaXMKICAgZGVzY3JpYmVkLgoKICBXT0FGCiAgIFRoZSAnT2ZmaWNpYWwgYXVkaW8gZmlsZSB3ZWJwYWdlJyBmcmFtZSBpcyBhIFVSTCBwb2ludGluZyBhdCBhIGZpbGUKICAgc3BlY2lmaWMgd2VicGFnZS4KCiAgV09BUgogICBUaGUgJ09mZmljaWFsIGFydGlzdC9wZXJmb3JtZXIgd2VicGFnZScgZnJhbWUgaXMgYSBVUkwgcG9pbnRpbmcgYXQKICAgdGhlIGFydGlzdHMgb2ZmaWNpYWwgd2VicGFnZS4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIldPQVIiIGZyYW1lCiAgIGluIGEgdGFnIGlmIHRoZSBhdWRpbyBjb250YWlucyBtb3JlIHRoYW4gb25lIHBlcmZvcm1lciwgYnV0IG5vdCB3aXRoCiAgIHRoZSBzYW1lIGNvbnRlbnQuCgogIFdPQVMKICAgVGhlICdPZmZpY2lhbCBhdWRpbyBzb3VyY2Ugd2VicGFnZScgZnJhbWUgaXMgYSBVUkwgcG9pbnRpbmcgYXQgdGhlCiAgIG9mZmljaWFsIHdlYnBhZ2UgZm9yIHRoZSBzb3VyY2Ugb2YgdGhlIGF1ZGlvIGZpbGUsIGUuZy4gYSBtb3ZpZS4KCiAgV09SUwogICBUaGUgJ09mZmljaWFsIEludGVybmV0IHJhZGlvIHN0YXRpb24gaG9tZXBhZ2UnIGNvbnRhaW5zIGEgVVJMCiAgIHBvaW50aW5nIGF0IHRoZSBob21lcGFnZSBvZiB0aGUgaW50ZXJuZXQgcmFkaW8gc3RhdGlvbi4KCiAgV1BBWQogICBUaGUgJ1BheW1lbnQnIGZyYW1lIGlzIGEgVVJMIHBvaW50aW5nIGF0IGEgd2VicGFnZSB0aGF0IHdpbGwgaGFuZGxlCiAgIHRoZSBwcm9jZXNzIG9mIHBheWluZyBmb3IgdGhpcyBmaWxlLgoKICBXUFVCCiAgIFRoZSAnUHVibGlzaGVycyBvZmZpY2lhbCB3ZWJwYWdlJyBmcmFtZSBpcyBhIFVSTCBwb2ludGluZyBhdCB0aGUKICAgb2ZmaWNpYWwgd2VicGFnZSBmb3IgdGhlIHB1Ymxpc2hlci4KCgo0LjMuMi4gICBVc2VyIGRlZmluZWQgVVJMIGxpbmsgZnJhbWUKCiAgIFRoaXMgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIFVSTCBbVVJMXSBsaW5rcyBjb25jZXJuaW5nIHRoZSBhdWRpbyBmaWxlCiAgIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIG90aGVyICJXIi1mcmFtZXMuIFRoZSBmcmFtZSBib2R5IGNvbnNpc3RzCiAgIG9mIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN0cmluZywgcmVwcmVzZW50ZWQgYXMgYSB0ZXJtaW5hdGVkIHN0cmluZywKICAgZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBVUkwuIFRoZSBVUkwgaXMgYWx3YXlzIGVuY29kZWQgd2l0aCBJU08tODg1OS0xCiAgIFtJU08tODg1OS0xXS4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIldYWFgiIGZyYW1lIGluIGVhY2ggdGFnLAogICBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSBkZXNjcmlwdGlvbi4KCiAgICAgPEhlYWRlciBmb3IgJ1VzZXIgZGVmaW5lZCBVUkwgbGluayBmcmFtZScsIElEOiAiV1hYWCI+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgJHh4CiAgICAgRGVzY3JpcHRpb24gICAgICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4gJDAwICgwMCkKICAgICBVUkwgICAgICAgICAgICAgICA8dGV4dCBzdHJpbmc+CgoKNC40LiAgIE11c2ljIENEIGlkZW50aWZpZXIKCiAgIFRoaXMgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIG11c2ljIHRoYXQgY29tZXMgZnJvbSBhIENELCBzbyB0aGF0IHRoZSBDRAogICBjYW4gYmUgaWRlbnRpZmllZCBpbiBkYXRhYmFzZXMgc3VjaCBhcyB0aGUgQ0REQiBbQ0REQl0uIFRoZSBmcmFtZQogICBjb25zaXN0cyBvZiBhIGJpbmFyeSBkdW1wIG9mIHRoZSBUYWJsZSBPZiBDb250ZW50cywgVE9DLCBmcm9tIHRoZSBDRCwKICAgd2hpY2ggaXMgYSBoZWFkZXIgb2YgNCBieXRlcyBhbmQgdGhlbiA4IGJ5dGVzL3RyYWNrIG9uIHRoZSBDRCBwbHVzIDgKICAgYnl0ZXMgZm9yIHRoZSAnbGVhZCBvdXQnLCBtYWtpbmcgYSBtYXhpbXVtIG9mIDgwNCBieXRlcy4gVGhlIG9mZnNldAogICB0byB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IHRyYWNrIG9uIHRoZSBDRCBzaG91bGQgYmUgZGVzY3JpYmVkIHdpdGggYQogICBmb3VyIGJ5dGVzIGFic29sdXRlIENELWZyYW1lIGFkZHJlc3MgcGVyIHRyYWNrLCBhbmQgbm90IHdpdGggYWJzb2x1dGUKICAgdGltZS4gV2hlbiB0aGlzIGZyYW1lIGlzIHVzZWQgdGhlIHByZXNlbmNlIG9mIGEgdmFsaWQgIlRSQ0siIGZyYW1lIGlzCiAgIFJFUVVJUkVELCBldmVuIGlmIHRoZSBDRCdzIG9ubHkgZ290IG9uZSB0cmFjay4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdAogICB0aGlzIGZyYW1lIGlzIGFsd2F5cyBhZGRlZCB0byB0YWdzIG9yaWdpbmF0aW5nIGZyb20gQ0RzLiBUaGVyZSBtYXkKICAgb25seSBiZSBvbmUgIk1DREkiIGZyYW1lIGluIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnTXVzaWMgQ0QgaWRlbnRpZmllcicsIElEOiAiTUNESSI+CiAgICAgQ0QgVE9DICAgICAgICAgICAgICAgIDxiaW5hcnkgZGF0YT4KCgo0LjUuICAgRXZlbnQgdGltaW5nIGNvZGVzCgogICBUaGlzIGZyYW1lIGFsbG93cyBzeW5jaHJvbmlzYXRpb24gd2l0aCBrZXkgZXZlbnRzIGluIHRoZSBhdWRpby4gVGhlCiAgIGhlYWRlciBpczoKCiAgICAgPEhlYWRlciBmb3IgJ0V2ZW50IHRpbWluZyBjb2RlcycsIElEOiAiRVRDTyI+CiAgICAgVGltZSBzdGFtcCBmb3JtYXQgICAgJHh4CgogICBXaGVyZSB0aW1lIHN0YW1wIGZvcm1hdCBpczoKCiAgICAgJDAxICBBYnNvbHV0ZSB0aW1lLCAzMiBiaXQgc2l6ZWQsIHVzaW5nIE1QRUcgW01QRUddIGZyYW1lcyBhcyB1bml0CiAgICAgJDAyICBBYnNvbHV0ZSB0aW1lLCAzMiBiaXQgc2l6ZWQsIHVzaW5nIG1pbGxpc2Vjb25kcyBhcyB1bml0CgogICBBYnNvbHV0ZSB0aW1lIG1lYW5zIHRoYXQgZXZlcnkgc3RhbXAgY29udGFpbnMgdGhlIHRpbWUgZnJvbSB0aGUKICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgoKICAgRm9sbG93ZWQgYnkgYSBsaXN0IG9mIGtleSBldmVudHMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CgogICAgIFR5cGUgb2YgZXZlbnQgICAkeHgKICAgICBUaW1lIHN0YW1wICAgICAgJHh4ICh4eCAuLi4pCgogICBUaGUgJ1RpbWUgc3RhbXAnIGlzIHNldCB0byB6ZXJvIGlmIGRpcmVjdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAgIHNvdW5kIG9yIGFmdGVyIHRoZSBwcmV2aW91cyBldmVudC4gQWxsIGV2ZW50cyBNVVNUIGJlIHNvcnRlZCBpbgogICBjaHJvbm9sb2dpY2FsIG9yZGVyLiBUaGUgdHlwZSBvZiBldmVudCBpcyBhcyBmb2xsb3dzOgoKICAgICAkMDAgIHBhZGRpbmcgKGhhcyBubyBtZWFuaW5nKQogICAgICQwMSAgZW5kIG9mIGluaXRpYWwgc2lsZW5jZQogICAgICQwMiAgaW50cm8gc3RhcnQKICAgICAkMDMgIG1haW4gcGFydCBzdGFydAogICAgICQwNCAgb3V0cm8gc3RhcnQKICAgICAkMDUgIG91dHJvIGVuZAogICAgICQwNiAgdmVyc2Ugc3RhcnQKICAgICAkMDcgIHJlZnJhaW4gc3RhcnQKICAgICAkMDggIGludGVybHVkZSBzdGFydAogICAgICQwOSAgdGhlbWUgc3RhcnQKICAgICAkMEEgIHZhcmlhdGlvbiBzdGFydAogICAgICQwQiAga2V5IGNoYW5nZQogICAgICQwQyAgdGltZSBjaGFuZ2UKICAgICAkMEQgIG1vbWVudGFyeSB1bndhbnRlZCBub2lzZSAoU25hcCwgQ3JhY2tsZSAmIFBvcCkKICAgICAkMEUgIHN1c3RhaW5lZCBub2lzZQogICAgICQwRiAgc3VzdGFpbmVkIG5vaXNlIGVuZAogICAgICQxMCAgaW50cm8gZW5kCiAgICAgJDExICBtYWluIHBhcnQgZW5kCiAgICAgJDEyICB2ZXJzZSBlbmQKICAgICAkMTMgIHJlZnJhaW4gZW5kCiAgICAgJDE0ICB0aGVtZSBlbmQKICAgICAkMTUgIHByb2Zhbml0eQogICAgICQxNiAgcHJvZmFuaXR5IGVuZAoKICAgICAkMTctJERGICByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgICAkRTAtJEVGICBub3QgcHJlZGVmaW5lZCBzeW5jaCAwLUYKCiAgICAgJEYwLSRGQyAgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKCiAgICAgJEZEICBhdWRpbyBlbmQgKHN0YXJ0IG9mIHNpbGVuY2UpCiAgICAgJEZFICBhdWRpbyBmaWxlIGVuZHMKICAgICAkRkYgIG9uZSBtb3JlIGJ5dGUgb2YgZXZlbnRzIGZvbGxvd3MgKGFsbCB0aGUgZm9sbG93aW5nIGJ5dGVzIHdpdGgKICAgICAgICAgIHRoZSB2YWx1ZSAkRkYgaGF2ZSB0aGUgc2FtZSBmdW5jdGlvbikKCiAgIFRlcm1pbmF0aW5nIHRoZSBzdGFydCBldmVudHMgc3VjaCBhcyAiaW50cm8gc3RhcnQiIGlzIE9QVElPTkFMLiBUaGUKICAgJ05vdCBwcmVkZWZpbmVkIHN5bmNoJ3MgKCRFMC1FRikgYXJlIGZvciB1c2VyIGV2ZW50cy4gWW91IG1pZ2h0IHdhbnQKICAgdG8gc3luY2hyb25pc2UgeW91ciBtdXNpYyB0byBzb21ldGhpbmcsIGxpa2Ugc2V0dGluZyBvZmYgYW4gZXhwbG9zaW9uCiAgIG9uLXN0YWdlLCBhY3RpdmF0aW5nIGEgc2NyZWVuc2F2ZXIgZXRjLgoKICAgVGhlcmUgbWF5IG9ubHkgYmUgb25lICJFVENPIiBmcmFtZSBpbiBlYWNoIHRhZy4KCgo0LjYuICAgTVBFRyBsb2NhdGlvbiBsb29rdXAgdGFibGUKCiAgIFRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeSBvZiBqdW1wcyB3aXRoaW4gYSBNUEVHIFtNUEVHXQogICBhdWRpbyBmaWxlLCBmcmFtZXMgd2l0aCB0aW1lIGNvZGVzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIGZpbGUKICAgbWlnaHQgYmUgdXNlZnVsLiBUaGlzIElEM3YyIGZyYW1lIGluY2x1ZGVzIHJlZmVyZW5jZXMgdGhhdCB0aGUKICAgc29mdHdhcmUgY2FuIHVzZSB0byBjYWxjdWxhdGUgcG9zaXRpb25zIGluIHRoZSBmaWxlLiBBZnRlciB0aGUgZnJhbWUKICAgaGVhZGVyIGZvbGxvd3MgYSBkZXNjcmlwdG9yIG9mIGhvdyBtdWNoIHRoZSAnZnJhbWUgY291bnRlcicgc2hvdWxkIGJlCiAgIGluY3JlYXNlZCBmb3IgZXZlcnkgcmVmZXJlbmNlLiBJZiB0aGlzIHZhbHVlIGlzIHR3byB0aGVuIHRoZSBmaXJzdAogICByZWZlcmVuY2UgcG9pbnRzIG91dCB0aGUgc2Vjb25kIGZyYW1lLCB0aGUgMm5kIHJlZmVyZW5jZSB0aGUgNHRoCiAgIGZyYW1lLCB0aGUgM3JkIHJlZmVyZW5jZSB0aGUgNnRoIGZyYW1lIGV0Yy4gSW4gYSBzaW1pbGFyIHdheSB0aGUKICAgJ2J5dGVzIGJldHdlZW4gcmVmZXJlbmNlJyBhbmQgJ21pbGxpc2Vjb25kcyBiZXR3ZWVuIHJlZmVyZW5jZScgcG9pbnRzCiAgIG91dCBieXRlcyBhbmQgbWlsbGlzZWNvbmRzIHJlc3BlY3RpdmVseS4KCiAgIEVhY2ggcmVmZXJlbmNlIGNvbnNpc3RzIG9mIHR3byBwYXJ0czsgYSBjZXJ0YWluIG51bWJlciBvZiBiaXRzLCBhcwogICBkZWZpbmVkIGluICdiaXRzIGZvciBieXRlcyBkZXZpYXRpb24nLCB0aGF0IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZQogICBiZXR3ZWVuIHdoYXQgaXMgc2FpZCBpbiAnYnl0ZXMgYmV0d2VlbiByZWZlcmVuY2UnIGFuZCB0aGUgcmVhbGl0eSBhbmQKICAgYSBjZXJ0YWluIG51bWJlciBvZiBiaXRzLCBhcyBkZWZpbmVkIGluICdiaXRzIGZvciBtaWxsaXNlY29uZHMKICAgZGV2aWF0aW9uJywgdGhhdCBkZXNjcmliZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3aGF0IGlzIHNhaWQgaW4KICAgJ21pbGxpc2Vjb25kcyBiZXR3ZWVuIHJlZmVyZW5jZScgYW5kIHRoZSByZWFsaXR5LiBUaGUgbnVtYmVyIG9mIGJpdHMKICAgaW4gZXZlcnkgcmVmZXJlbmNlLCBpLmUuICdiaXRzIGZvciBieXRlcyBkZXZpYXRpb24nKydiaXRzIGZvcgogICBtaWxsaXNlY29uZHMgZGV2aWF0aW9uJywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGZvdXIuIFRoZXJlIG1heSBvbmx5CiAgIGJlIG9uZSAiTUxMVCIgZnJhbWUgaW4gZWFjaCB0YWcuCgogICAgIDxIZWFkZXIgZm9yICdMb2NhdGlvbiBsb29rdXAgdGFibGUnLCBJRDogIk1MTFQiPgogICAgIE1QRUcgZnJhbWVzIGJldHdlZW4gcmVmZXJlbmNlICAkeHggeHgKICAgICBCeXRlcyBiZXR3ZWVuIHJlZmVyZW5jZSAgICAgICAgJHh4IHh4IHh4CiAgICAgTWlsbGlzZWNvbmRzIGJldHdlZW4gcmVmZXJlbmNlICR4eCB4eCB4eAogICAgIEJpdHMgZm9yIGJ5dGVzIGRldmlhdGlvbiAgICAgICAkeHgKICAgICBCaXRzIGZvciBtaWxsaXNlY29uZHMgZGV2LiAgICAgJHh4CgogICBUaGVuIGZvciBldmVyeSByZWZlcmVuY2UgdGhlIGZvbGxvd2luZyBkYXRhIGlzIGluY2x1ZGVkOwoKICAgICBEZXZpYXRpb24gaW4gYnl0ZXMgICAgICAgICAleHh4Li4uLgogICAgIERldmlhdGlvbiBpbiBtaWxsaXNlY29uZHMgICV4eHguLi4uCgoKNC43LiAgIFN5bmNocm9uaXNlZCB0ZW1wbyBjb2RlcwoKICAgRm9yIGEgbW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVtcG8gb2YgYSBtdXNpY2FsIHBpZWNlLCB0aGlzCiAgIGZyYW1lIG1pZ2h0IGJlIHVzZWQuIEFmdGVyIHRoZSBoZWFkZXIgZm9sbG93cyBvbmUgYnl0ZSBkZXNjcmliaW5nCiAgIHdoaWNoIHRpbWUgc3RhbXAgZm9ybWF0IHNob3VsZCBiZSB1c2VkLiBUaGVuIGZvbGxvd3Mgb25lIG9yIG1vcmUKICAgdGVtcG8gY29kZXMuIEVhY2ggdGVtcG8gY29kZSBjb25zaXN0cyBvZiBvbmUgdGVtcG8gcGFydCBhbmQgb25lIHRpbWUKICAgcGFydC4gVGhlIHRlbXBvIGlzIGluIEJQTSBkZXNjcmliZWQgd2l0aCBvbmUgb3IgdHdvIGJ5dGVzLiBJZiB0aGUKICAgZmlyc3QgYnl0ZSBoYXMgdGhlIHZhbHVlICRGRiwgb25lIG1vcmUgYnl0ZSBmb2xsb3dzLCB3aGljaCBpcyBhZGRlZAogICB0byB0aGUgZmlyc3QgZ2l2aW5nIGEgcmFuZ2UgZnJvbSAyIC0gNTEwIEJQTSwgc2luY2UgJDAwIGFuZCAkMDEgaXMKICAgcmVzZXJ2ZWQuICQwMCBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgYmVhdC1mcmVlIHRpbWUgcGVyaW9kLCB3aGljaCBpcwogICBub3QgdGhlIHNhbWUgYXMgYSBtdXNpYy1mcmVlIHRpbWUgcGVyaW9kLiAkMDEgaXMgdXNlZCB0byBpbmRpY2F0ZSBvbmUKICAgc2luZ2xlIGJlYXQtc3Ryb2tlIGZvbGxvd2VkIGJ5IGEgYmVhdC1mcmVlIHBlcmlvZC4KCiAgIFRoZSB0ZW1wbyBkZXNjcmlwdG9yIGlzIGZvbGxvd2VkIGJ5IGEgdGltZSBzdGFtcC4gRXZlcnkgdGltZSB0aGUKICAgdGVtcG8gaW4gdGhlIG11c2ljIGNoYW5nZXMsIGEgdGVtcG8gZGVzY3JpcHRvciBtYXkgaW5kaWNhdGUgdGhpcyBmb3IKICAgdGhlIHBsYXllci4gQWxsIHRlbXBvIGRlc2NyaXB0b3JzIE1VU1QgYmUgc29ydGVkIGluIGNocm9ub2xvZ2ljYWwKICAgb3JkZXIuIFRoZSBmaXJzdCBiZWF0LXN0cm9rZSBpbiBhIHRpbWUtcGVyaW9kIGlzIGF0IHRoZSBzYW1lIHRpbWUgYXMKICAgdGhlIGJlYXQgZGVzY3JpcHRpb24gb2NjdXJzLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIlNZVEMiIGZyYW1lIGluCiAgIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnU3luY2hyb25pc2VkIHRlbXBvIGNvZGVzJywgSUQ6ICJTWVRDIj4KICAgICBUaW1lIHN0YW1wIGZvcm1hdCAgICR4eAogICAgIFRlbXBvIGRhdGEgICAgICAgICAgPGJpbmFyeSBkYXRhPgoKICAgV2hlcmUgdGltZSBzdGFtcCBmb3JtYXQgaXM6CgogICAgICQwMSAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBNUEVHIFtNUEVHXSBmcmFtZXMgYXMgdW5pdAogICAgICQwMiAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBtaWxsaXNlY29uZHMgYXMgdW5pdAoKICAgQWJzb2x1dGUgdGltZSBtZWFucyB0aGF0IGV2ZXJ5IHN0YW1wIGNvbnRhaW5zIHRoZSB0aW1lIGZyb20gdGhlCiAgIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCgo0LjguICAgVW5zeW5jaHJvbmlzZWQgbHlyaWNzL3RleHQgdHJhbnNjcmlwdGlvbgoKICAgVGhpcyBmcmFtZSBjb250YWlucyB0aGUgbHlyaWNzIG9mIHRoZSBzb25nIG9yIGEgdGV4dCB0cmFuc2NyaXB0aW9uIG9mCiAgIG90aGVyIHZvY2FsIGFjdGl2aXRpZXMuIFRoZSBoZWFkIGluY2x1ZGVzIGFuIGVuY29kaW5nIGRlc2NyaXB0b3IgYW5kCiAgIGEgY29udGVudCBkZXNjcmlwdG9yLiBUaGUgYm9keSBjb25zaXN0cyBvZiB0aGUgYWN0dWFsIHRleHQuIFRoZQogICAnQ29udGVudCBkZXNjcmlwdG9yJyBpcyBhIHRlcm1pbmF0ZWQgc3RyaW5nLiBJZiBubyBkZXNjcmlwdG9yIGlzCiAgIGVudGVyZWQsICdDb250ZW50IGRlc2NyaXB0b3InIGlzICQwMCAoMDApIG9ubHkuIE5ld2xpbmUgY2hhcmFjdGVycwogICBhcmUgYWxsb3dlZCBpbiB0aGUgdGV4dC4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgJ1Vuc3luY2hyb25pc2VkCiAgIGx5cmljcy90ZXh0IHRyYW5zY3JpcHRpb24nIGZyYW1lIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUKICAgc2FtZSBsYW5ndWFnZSBhbmQgY29udGVudCBkZXNjcmlwdG9yLgoKICAgICA8SGVhZGVyIGZvciAnVW5zeW5jaHJvbmlzZWQgbHlyaWNzL3RleHQgdHJhbnNjcmlwdGlvbicsIElEOiAiVVNMVCI+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgICAgJHh4CiAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgJHh4IHh4IHh4CiAgICAgQ29udGVudCBkZXNjcmlwdG9yICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4gJDAwICgwMCkKICAgICBMeXJpY3MvdGV4dCAgICAgICAgICA8ZnVsbCB0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC45LiAgIFN5bmNocm9uaXNlZCBseXJpY3MvdGV4dAoKICAgVGhpcyBpcyBhbm90aGVyIHdheSBvZiBpbmNvcnBvcmF0aW5nIHRoZSB3b3Jkcywgc2FpZCBvciBzdW5nIGx5cmljcywKICAgaW4gdGhlIGF1ZGlvIGZpbGUgYXMgdGV4dCwgdGhpcyB0aW1lLCBob3dldmVyLCBpbiBzeW5jIHdpdGggdGhlCiAgIGF1ZGlvLiBJdCBtaWdodCBhbHNvIGJlIHVzZWQgdG8gZGVzY3JpYmluZyBldmVudHMgZS5nLiBvY2N1cnJpbmcgb24gYQogICBzdGFnZSBvciBvbiB0aGUgc2NyZWVuIGluIHN5bmMgd2l0aCB0aGUgYXVkaW8uIFRoZSBoZWFkZXIgaW5jbHVkZXMgYQogICBjb250ZW50IGRlc2NyaXB0b3IsIHJlcHJlc2VudGVkIHdpdGggYXMgdGVybWluYXRlZCB0ZXh0IHN0cmluZy4gSWYgbm8KICAgZGVzY3JpcHRvciBpcyBlbnRlcmVkLCAnQ29udGVudCBkZXNjcmlwdG9yJyBpcyAkMDAgKDAwKSBvbmx5LgoKICAgICA8SGVhZGVyIGZvciAnU3luY2hyb25pc2VkIGx5cmljcy90ZXh0JywgSUQ6ICJTWUxUIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgICAkeHgKICAgICBMYW5ndWFnZSAgICAgICAgICAgICAkeHggeHggeHgKICAgICBUaW1lIHN0YW1wIGZvcm1hdCAgICAkeHgKICAgICBDb250ZW50IHR5cGUgICAgICAgICAkeHgKICAgICBDb250ZW50IGRlc2NyaXB0b3IgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQoKICAgQ29udGVudCB0eXBlOiAgICQwMCBpcyBvdGhlcgogICAgICAgICAgICAgICAgICAgJDAxIGlzIGx5cmljcwogICAgICAgICAgICAgICAgICAgJDAyIGlzIHRleHQgdHJhbnNjcmlwdGlvbgogICAgICAgICAgICAgICAgICAgJDAzIGlzIG1vdmVtZW50L3BhcnQgbmFtZSAoZS5nLiAiQWRhZ2lvIikKICAgICAgICAgICAgICAgICAgICQwNCBpcyBldmVudHMgKGUuZy4gIkRvbiBRdWlqb3RlIGVudGVycyB0aGUgc3RhZ2UiKQogICAgICAgICAgICAgICAgICAgJDA1IGlzIGNob3JkIChlLmcuICJCYiBGIEZzdXMiKQogICAgICAgICAgICAgICAgICAgJDA2IGlzIHRyaXZpYS8ncG9wIHVwJyBpbmZvcm1hdGlvbgogICAgICAgICAgICAgICAgICAgJDA3IGlzIFVSTHMgdG8gd2VicGFnZXMKICAgICAgICAgICAgICAgICAgICQwOCBpcyBVUkxzIHRvIGltYWdlcwoKICAgVGltZSBzdGFtcCBmb3JtYXQ6CgogICAgICQwMSAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBNUEVHIFtNUEVHXSBmcmFtZXMgYXMgdW5pdAogICAgICQwMiAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBtaWxsaXNlY29uZHMgYXMgdW5pdAoKICAgQWJzb2x1dGUgdGltZSBtZWFucyB0aGF0IGV2ZXJ5IHN0YW1wIGNvbnRhaW5zIHRoZSB0aW1lIGZyb20gdGhlCiAgIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCiAgIFRoZSB0ZXh0IHRoYXQgZm9sbG93cyB0aGUgZnJhbWUgaGVhZGVyIGRpZmZlcnMgZnJvbSB0aGF0IG9mIHRoZQogICB1bnN5bmNocm9uaXNlZCBseXJpY3MvdGV4dCB0cmFuc2NyaXB0aW9uIGluIG9uZSBtYWpvciB3YXkuIEVhY2gKICAgc3lsbGFibGUgKG9yIHdoYXRldmVyIHNpemUgb2YgdGV4dCBpcyBjb25zaWRlcmVkIHRvIGJlIGNvbnZlbmllbnQgYnkKICAgdGhlIGVuY29kZXIpIGlzIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmb2xsb3dlZCBieSBhIHRpbWUgc3RhbXAKICAgZGVub3Rpbmcgd2hlcmUgaW4gdGhlIHNvdW5kIGZpbGUgaXQgYmVsb25ncy4gRWFjaCBzeW5jIHRodXMgaGFzIHRoZQogICBmb2xsb3dpbmcgc3RydWN0dXJlOgoKICAgICBUZXJtaW5hdGVkIHRleHQgdG8gYmUgc3luY2VkICh0eXBpY2FsbHkgYSBzeWxsYWJsZSkKICAgICBTeW5jIGlkZW50aWZpZXIgKHRlcm1pbmF0b3IgdG8gYWJvdmUgc3RyaW5nKSAgICQwMCAoMDApCiAgICAgVGltZSBzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeHggKHh4IC4uLikKCiAgIFRoZSAndGltZSBzdGFtcCcgaXMgc2V0IHRvIHplcm8gb3IgdGhlIHdob2xlIHN5bmMgaXMgb21pdHRlZCBpZgogICBsb2NhdGVkIGRpcmVjdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNvdW5kLiBBbGwgdGltZSBzdGFtcHMKICAgc2hvdWxkIGJlIHNvcnRlZCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLiBUaGUgc3luYyBjYW4gYmUgY29uc2lkZXJlZAogICBhcyBhIHZhbGlkYXRvciBvZiB0aGUgc3Vic2VxdWVudCBzdHJpbmcuCgogICBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gYWxsICJTWUxUIiBmcmFtZXMgYW5kIE1VU1QgYmUgdXNlZAogICBhZnRlciBldmVyeSBlbnRyeSAobmFtZSwgZXZlbnQgZXRjLikgaW4gYSBmcmFtZSB3aXRoIHRoZSBjb250ZW50IHR5cGUKICAgJDAzIC0gJDA0LgoKICAgQSBmZXcgY29uc2lkZXJhdGlvbnMgcmVnYXJkaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVyczogV2hpdGVzcGFjZQogICBzZXBhcmF0aW5nIHdvcmRzIHNob3VsZCBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgd29yZCwgdGh1cwogICBvY2N1cnJpbmcgaW4gZnJvbnQgb2YgdGhlIGZpcnN0IHN5bGxhYmxlIG9mIGEgbmV3IHdvcmQuIFRoaXMgaXMgYWxzbwogICB2YWxpZCBmb3IgbmV3IGxpbmUgY2hhcmFjdGVycy4gQSBzeWxsYWJsZSBmb2xsb3dlZCBieSBhIGNvbW1hIHNob3VsZAogICBub3QgYmUgYnJva2VuIGFwYXJ0IHdpdGggYSBzeW5jIChib3RoIHRoZSBzeWxsYWJsZSBhbmQgdGhlIGNvbW1hCiAgIHNob3VsZCBiZSBiZWZvcmUgdGhlIHN5bmMpLgoKICAgQW4gZXhhbXBsZTogVGhlICJVU0xUIiBwYXNzYWdlCgogICAgICJTdHJhbmdlcnMgaW4gdGhlIG5pZ2h0IiAkMEEgIkV4Y2hhbmdpbmcgZ2xhbmNlcyIKCiAgIHdvdWxkIGJlICJTWUxUIiBlbmNvZGVkIGFzOgoKICAgICAiU3RyYW5nIiAkMDAgeHggeHggImVycyIgJDAwIHh4IHh4ICIgaW4iICQwMCB4eCB4eCAiIHRoZSIgJDAwIHh4IHh4CiAgICAgIiBuaWdodCIgJDAwIHh4IHh4IDBBICJFeCIgJDAwIHh4IHh4ICJjaGFuZyIgJDAwIHh4IHh4ICJpbmciICQwMCB4eAogICAgIHh4ICJnbGFuIiAkMDAgeHggeHggImNlcyIgJDAwIHh4IHh4CgogICBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSAiU1lMVCIgZnJhbWUgaW4gZWFjaCB0YWcsIGJ1dCBvbmx5IG9uZQogICB3aXRoIHRoZSBzYW1lIGxhbmd1YWdlIGFuZCBjb250ZW50IGRlc2NyaXB0b3IuCgoKNC4xMC4gICBDb21tZW50cwoKICAgVGhpcyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgYW55IGtpbmQgb2YgZnVsbCB0ZXh0IGluZm9ybWF0aW9uIHRoYXQKICAgZG9lcyBub3QgZml0IGluIGFueSBvdGhlciBmcmFtZS4gSXQgY29uc2lzdHMgb2YgYSBmcmFtZSBoZWFkZXIKICAgZm9sbG93ZWQgYnkgZW5jb2RpbmcsIGxhbmd1YWdlIGFuZCBjb250ZW50IGRlc2NyaXB0b3JzIGFuZCBpcyBlbmRlZAogICB3aXRoIHRoZSBhY3R1YWwgY29tbWVudCBhcyBhIHRleHQgc3RyaW5nLiBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlCiAgIGFsbG93ZWQgaW4gdGhlIGNvbW1lbnQgdGV4dCBzdHJpbmcuIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lCiAgIGNvbW1lbnQgZnJhbWUgaW4gZWFjaCB0YWcsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lIGxhbmd1YWdlIGFuZAogICBjb250ZW50IGRlc2NyaXB0b3IuCgogICAgIDxIZWFkZXIgZm9yICdDb21tZW50JywgSUQ6ICJDT01NIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgICAgICR4eAogICAgIExhbmd1YWdlICAgICAgICAgICAgICAgJHh4IHh4IHh4CiAgICAgU2hvcnQgY29udGVudCBkZXNjcmlwLiA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQogICAgIFRoZSBhY3R1YWwgdGV4dCAgICAgICAgPGZ1bGwgdGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPgoKCjQuMTEuICAgUmVsYXRpdmUgdm9sdW1lIGFkanVzdG1lbnQgKDIpCgogICBUaGlzIGlzIGEgbW9yZSBzdWJqZWN0aXZlIGZyYW1lIHRoYW4gdGhlIHByZXZpb3VzIG9uZXMuIEl0IGFsbG93cyB0aGUKICAgdXNlciB0byBzYXkgaG93IG11Y2ggaGUgd2FudHMgdG8gaW5jcmVhc2UvZGVjcmVhc2UgdGhlIHZvbHVtZSBvbiBlYWNoCiAgIGNoYW5uZWwgd2hlbiB0aGUgZmlsZSBpcyBwbGF5ZWQuIFRoZSBwdXJwb3NlIGlzIHRvIGJlIGFibGUgdG8gYWxpZ24KICAgYWxsIGZpbGVzIHRvIGEgcmVmZXJlbmNlIHZvbHVtZSwgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgdGhlCiAgIHZvbHVtZSBjb25zdGFudGx5LiBUaGlzIGZyYW1lIG1heSBhbHNvIGJlIHVzZWQgdG8gYmFsYW5jZSBhZGp1c3QgdGhlCiAgIGF1ZGlvLiBUaGUgdm9sdW1lIGFkanVzdG1lbnQgaXMgZW5jb2RlZCBhcyBhIGZpeGVkIHBvaW50IGRlY2liZWwKICAgdmFsdWUsIDE2IGJpdCBzaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgKGFkanVzdG1lbnQqNTEyKSwgZ2l2aW5nCiAgICsvLSA2NCBkQiB3aXRoIGEgcHJlY2lzaW9uIG9mIDAuMDAxOTUzMTI1IGRCLiBFLmcuICsyIGRCIGlzIHN0b3JlZCBhcwogICAkMDQgMDAgYW5kIC0yIGRCIGlzICRGQyAwMC4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIlJWQTIiIGZyYW1lCiAgIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcuCgogICAgIDxIZWFkZXIgZm9yICdSZWxhdGl2ZSB2b2x1bWUgYWRqdXN0bWVudCAoMiknLCBJRDogIlJWQTIiPgogICAgIElkZW50aWZpY2F0aW9uICAgICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCgogICBUaGUgJ2lkZW50aWZpY2F0aW9uJyBzdHJpbmcgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2l0dWF0aW9uIGFuZC9vcgogICBkZXZpY2Ugd2hlcmUgdGhpcyBhZGp1c3RtZW50IHNob3VsZCBhcHBseS4gVGhlIGZvbGxvd2luZyBpcyB0aGVuCiAgIHJlcGVhdGVkIGZvciBldmVyeSBjaGFubmVsCgogICAgIFR5cGUgb2YgY2hhbm5lbCAgICAgICAgICR4eAogICAgIFZvbHVtZSBhZGp1c3RtZW50ICAgICAgICR4eCB4eAogICAgIEJpdHMgcmVwcmVzZW50aW5nIHBlYWsgICR4eAogICAgIFBlYWsgdm9sdW1lICAgICAgICAgICAgICR4eCAoeHggLi4uKQoKCiAgIFR5cGUgb2YgY2hhbm5lbDogICQwMCAgT3RoZXIKICAgICAgICAgICAgICAgICAgICAgJDAxICBNYXN0ZXIgdm9sdW1lCiAgICAgICAgICAgICAgICAgICAgICQwMiAgRnJvbnQgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgJDAzICBGcm9udCBsZWZ0CiAgICAgICAgICAgICAgICAgICAgICQwNCAgQmFjayByaWdodAogICAgICAgICAgICAgICAgICAgICAkMDUgIEJhY2sgbGVmdAogICAgICAgICAgICAgICAgICAgICAkMDYgIEZyb250IGNlbnRyZQogICAgICAgICAgICAgICAgICAgICAkMDcgIEJhY2sgY2VudHJlCiAgICAgICAgICAgICAgICAgICAgICQwOCAgU3Vid29vZmVyCgogICBCaXRzIHJlcHJlc2VudGluZyBwZWFrIGNhbiBiZSBhbnkgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU1LiAwIG1lYW5zCiAgIHRoYXQgdGhlcmUgaXMgbm8gcGVhayB2b2x1bWUgZmllbGQuIFRoZSBwZWFrIHZvbHVtZSBmaWVsZCBpcyBhbHdheXMKICAgcGFkZGVkIHRvIHdob2xlIGJ5dGVzLCBzZXR0aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgdG8gemVyby4KCgo0LjEyLiAgIEVxdWFsaXNhdGlvbiAoMikKCiAgIFRoaXMgaXMgYW5vdGhlciBzdWJqZWN0aXZlLCBhbGlnbm1lbnQgZnJhbWUuIEl0IGFsbG93cyB0aGUgdXNlciB0bwogICBwcmVkZWZpbmUgYW4gZXF1YWxpc2F0aW9uIGN1cnZlIHdpdGhpbiB0aGUgYXVkaW8gZmlsZS4gVGhlcmUgbWF5IGJlCiAgIG1vcmUgdGhhbiBvbmUgIkVRVTIiIGZyYW1lIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZQogICBpZGVudGlmaWNhdGlvbiBzdHJpbmcuCgogICAgIDxIZWFkZXIgb2YgJ0VxdWFsaXNhdGlvbiAoMiknLCBJRDogIkVRVTIiPgogICAgIEludGVycG9sYXRpb24gbWV0aG9kICAkeHgKICAgICBJZGVudGlmaWNhdGlvbiAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKCiAgIFRoZSAnaW50ZXJwb2xhdGlvbiBtZXRob2QnIGRlc2NyaWJlcyB3aGljaCBtZXRob2QgaXMgcHJlZmVycmVkIHdoZW4KICAgYW4gaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSBhZGp1c3RtZW50IHBvaW50IHRoYXQgZm9sbG93cy4gVGhlCiAgIGZvbGxvd2luZyBtZXRob2RzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDoKCiAgICAgJDAwICBCYW5kCiAgICAgICAgICBObyBpbnRlcnBvbGF0aW9uIGlzIG1hZGUuIEEganVtcCBmcm9tIG9uZSBhZGp1c3RtZW50IGxldmVsIHRvCiAgICAgICAgICBhbm90aGVyIG9jY3VycyBpbiB0aGUgbWlkZGxlIGJldHdlZW4gdHdvIGFkanVzdG1lbnQgcG9pbnRzLgogICAgICQwMSAgTGluZWFyCiAgICAgICAgICBJbnRlcnBvbGF0aW9uIGJldHdlZW4gYWRqdXN0bWVudCBwb2ludHMgaXMgbGluZWFyLgoKICAgVGhlICdpZGVudGlmaWNhdGlvbicgc3RyaW5nIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNpdHVhdGlvbiBhbmQvb3IKICAgZGV2aWNlIHdoZXJlIHRoaXMgYWRqdXN0bWVudCBzaG91bGQgYXBwbHkuIFRoZSBmb2xsb3dpbmcgaXMgdGhlbgogICByZXBlYXRlZCBmb3IgZXZlcnkgYWRqdXN0bWVudCBwb2ludAoKICAgICBGcmVxdWVuY3kgICAgICAgICAgJHh4IHh4CiAgICAgVm9sdW1lIGFkanVzdG1lbnQgICR4eCB4eAoKICAgVGhlIGZyZXF1ZW5jeSBpcyBzdG9yZWQgaW4gdW5pdHMgb2YgMS8yIEh6LCBnaXZpbmcgaXQgYSByYW5nZSBmcm9tIDAKICAgdG8gMzI3NjcgSHouCgogICBUaGUgdm9sdW1lIGFkanVzdG1lbnQgaXMgZW5jb2RlZCBhcyBhIGZpeGVkIHBvaW50IGRlY2liZWwgdmFsdWUsIDE2CiAgIGJpdCBzaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgKGFkanVzdG1lbnQqNTEyKSwgZ2l2aW5nICsvLSA2NCBkQgogICB3aXRoIGEgcHJlY2lzaW9uIG9mIDAuMDAxOTUzMTI1IGRCLiBFLmcuICsyIGRCIGlzIHN0b3JlZCBhcyAkMDQgMDAKICAgYW5kIC0yIGRCIGlzICRGQyAwMC4KCiAgIEFkanVzdG1lbnQgcG9pbnRzIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGZyZXF1ZW5jeSBhbmQgb25lIGZyZXF1ZW5jeQogICBzaG91bGQgb25seSBiZSBkZXNjcmliZWQgb25jZSBpbiB0aGUgZnJhbWUuCgoKNC4xMy4gICBSZXZlcmIKCiAgIFlldCBhbm90aGVyIHN1YmplY3RpdmUgZnJhbWUsIHdpdGggd2hpY2ggeW91IGNhbiBhZGp1c3QgZWNob2VzIG9mCiAgIGRpZmZlcmVudCBraW5kcy4gUmV2ZXJiIGxlZnQvcmlnaHQgaXMgdGhlIGRlbGF5IGJldHdlZW4gZXZlcnkgYm91bmNlCiAgIGluIG1zLiBSZXZlcmIgYm91bmNlcyBsZWZ0L3JpZ2h0IGlzIHRoZSBudW1iZXIgb2YgYm91bmNlcyB0aGF0IHNob3VsZAogICBiZSBtYWRlLiAkRkYgZXF1YWxzIGFuIGluZmluaXRlIG51bWJlciBvZiBib3VuY2VzLiBGZWVkYmFjayBpcyB0aGUKICAgYW1vdW50IG9mIHZvbHVtZSB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCB0byB0aGUgbmV4dCBlY2hvIGJvdW5jZS4gJDAwCiAgIGlzIDAlLCAkRkYgaXMgMTAwJS4gSWYgdGhpcyB2YWx1ZSB3ZXJlICQ3RiwgdGhlcmUgd291bGQgYmUgNTAlIHZvbHVtZQogICByZWR1Y3Rpb24gb24gdGhlIGZpcnN0IGJvdW5jZSwgNTAlIG9mIHRoYXQgb24gdGhlIHNlY29uZCBhbmQgc28gb24uCiAgIExlZnQgdG8gbGVmdCBtZWFucyB0aGUgc291bmQgZnJvbSB0aGUgbGVmdCBib3VuY2UgdG8gYmUgcGxheWVkIGluIHRoZQogICBsZWZ0IHNwZWFrZXIsIHdoaWxlIGxlZnQgdG8gcmlnaHQgbWVhbnMgc291bmQgZnJvbSB0aGUgbGVmdCBib3VuY2UgdG8KICAgYmUgcGxheWVkIGluIHRoZSByaWdodCBzcGVha2VyLgoKICAgJ1ByZW1peCBsZWZ0IHRvIHJpZ2h0JyBpcyB0aGUgYW1vdW50IG9mIGxlZnQgc291bmQgdG8gYmUgbWl4ZWQgaW4gdGhlCiAgIHJpZ2h0IGJlZm9yZSBhbnkgcmV2ZXJiIGlzIGFwcGxpZWQsIHdoZXJlICQwMCBpZCAwJSBhbmQgJEZGIGlzIDEwMCUuCiAgICdQcmVtaXggcmlnaHQgdG8gbGVmdCcgZG9lcyB0aGUgc2FtZSB0aGluZywgYnV0IHJpZ2h0IHRvIGxlZnQuCiAgIFNldHRpbmcgYm90aCBwcmVtaXggdG8gJEZGIHdvdWxkIHJlc3VsdCBpbiBhIG1vbm8gb3V0cHV0IChpZiB0aGUKICAgcmV2ZXJiIGlzIGFwcGxpZWQgc3ltbWV0cmljKS4gVGhlcmUgbWF5IG9ubHkgYmUgb25lICJSVlJCIiBmcmFtZSBpbgogICBlYWNoIHRhZy4KCiAgICAgPEhlYWRlciBmb3IgJ1JldmVyYicsIElEOiAiUlZSQiI+CiAgICAgUmV2ZXJiIGxlZnQgKG1zKSAgICAgICAgICAgICAgICAgJHh4IHh4CiAgICAgUmV2ZXJiIHJpZ2h0IChtcykgICAgICAgICAgICAgICAgJHh4IHh4CiAgICAgUmV2ZXJiIGJvdW5jZXMsIGxlZnQgICAgICAgICAgICAgJHh4CiAgICAgUmV2ZXJiIGJvdW5jZXMsIHJpZ2h0ICAgICAgICAgICAgJHh4CiAgICAgUmV2ZXJiIGZlZWRiYWNrLCBsZWZ0IHRvIGxlZnQgICAgJHh4CiAgICAgUmV2ZXJiIGZlZWRiYWNrLCBsZWZ0IHRvIHJpZ2h0ICAgJHh4CiAgICAgUmV2ZXJiIGZlZWRiYWNrLCByaWdodCB0byByaWdodCAgJHh4CiAgICAgUmV2ZXJiIGZlZWRiYWNrLCByaWdodCB0byBsZWZ0ICAgJHh4CiAgICAgUHJlbWl4IGxlZnQgdG8gcmlnaHQgICAgICAgICAgICAgJHh4CiAgICAgUHJlbWl4IHJpZ2h0IHRvIGxlZnQgICAgICAgICAgICAgJHh4CgoKNC4xNC4gICBBdHRhY2hlZCBwaWN0dXJlCgogICBUaGlzIGZyYW1lIGNvbnRhaW5zIGEgcGljdHVyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhdWRpbyBmaWxlLgogICBJbWFnZSBmb3JtYXQgaXMgdGhlIE1JTUUgdHlwZSBhbmQgc3VidHlwZSBbTUlNRV0gZm9yIHRoZSBpbWFnZS4gSW4KICAgdGhlIGV2ZW50IHRoYXQgdGhlIE1JTUUgbWVkaWEgdHlwZSBuYW1lIGlzIG9taXR0ZWQsICJpbWFnZS8iIHdpbGwgYmUKICAgaW1wbGllZC4gVGhlICJpbWFnZS9wbmciIFtQTkddIG9yICJpbWFnZS9qcGVnIiBbSkZJRl0gcGljdHVyZSBmb3JtYXQKICAgc2hvdWxkIGJlIHVzZWQgd2hlbiBpbnRlcm9wZXJhYmlsaXR5IGlzIHdhbnRlZC4gRGVzY3JpcHRpb24gaXMgYQogICBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGljdHVyZSwgcmVwcmVzZW50ZWQgYXMgYSB0ZXJtaW5hdGVkCiAgIHRleHQgc3RyaW5nLiBUaGVyZSBtYXkgYmUgc2V2ZXJhbCBwaWN0dXJlcyBhdHRhY2hlZCB0byBvbmUgZmlsZSwgZWFjaAogICBpbiB0aGVpciBpbmRpdmlkdWFsICJBUElDIiBmcmFtZSwgYnV0IG9ubHkgb25lIHdpdGggdGhlIHNhbWUgY29udGVudAogICBkZXNjcmlwdG9yLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgcGljdHVyZSB3aXRoIHRoZSBwaWN0dXJlIHR5cGUKICAgZGVjbGFyZWQgYXMgcGljdHVyZSB0eXBlICQwMSBhbmQgJDAyIHJlc3BlY3RpdmVseS4gVGhlcmUgaXMgdGhlCiAgIHBvc3NpYmlsaXR5IHRvIHB1dCBvbmx5IGEgbGluayB0byB0aGUgaW1hZ2UgZmlsZSBieSB1c2luZyB0aGUgJ01JTUUKICAgdHlwZScgIi0tPiIgYW5kIGhhdmluZyBhIGNvbXBsZXRlIFVSTCBbVVJMXSBpbnN0ZWFkIG9mIHBpY3R1cmUgZGF0YS4KICAgVGhlIHVzZSBvZiBsaW5rZWQgZmlsZXMgc2hvdWxkIGhvd2V2ZXIgYmUgdXNlZCBzcGFyaW5nbHkgc2luY2UgdGhlcmUKICAgaXMgdGhlIHJpc2sgb2Ygc2VwYXJhdGlvbiBvZiBmaWxlcy4KCiAgICAgPEhlYWRlciBmb3IgJ0F0dGFjaGVkIHBpY3R1cmUnLCBJRDogIkFQSUMiPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAkeHgKICAgICBNSU1FIHR5cGUgICAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBQaWN0dXJlIHR5cGUgICAgICAgJHh4CiAgICAgRGVzY3JpcHRpb24gICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgUGljdHVyZSBkYXRhICAgICAgIDxiaW5hcnkgZGF0YT4KCgogICBQaWN0dXJlIHR5cGU6ICAkMDAgIE90aGVyCiAgICAgICAgICAgICAgICAgICQwMSAgMzJ4MzIgcGl4ZWxzICdmaWxlIGljb24nIChQTkcgb25seSkKICAgICAgICAgICAgICAgICAgJDAyICBPdGhlciBmaWxlIGljb24KICAgICAgICAgICAgICAgICAgJDAzICBDb3ZlciAoZnJvbnQpCiAgICAgICAgICAgICAgICAgICQwNCAgQ292ZXIgKGJhY2spCiAgICAgICAgICAgICAgICAgICQwNSAgTGVhZmxldCBwYWdlCiAgICAgICAgICAgICAgICAgICQwNiAgTWVkaWEgKGUuZy4gbGFiZWwgc2lkZSBvZiBDRCkKICAgICAgICAgICAgICAgICAgJDA3ICBMZWFkIGFydGlzdC9sZWFkIHBlcmZvcm1lci9zb2xvaXN0CiAgICAgICAgICAgICAgICAgICQwOCAgQXJ0aXN0L3BlcmZvcm1lcgogICAgICAgICAgICAgICAgICAkMDkgIENvbmR1Y3RvcgogICAgICAgICAgICAgICAgICAkMEEgIEJhbmQvT3JjaGVzdHJhCiAgICAgICAgICAgICAgICAgICQwQiAgQ29tcG9zZXIKICAgICAgICAgICAgICAgICAgJDBDICBMeXJpY2lzdC90ZXh0IHdyaXRlcgogICAgICAgICAgICAgICAgICAkMEQgIFJlY29yZGluZyBMb2NhdGlvbgogICAgICAgICAgICAgICAgICAkMEUgIER1cmluZyByZWNvcmRpbmcKICAgICAgICAgICAgICAgICAgJDBGICBEdXJpbmcgcGVyZm9ybWFuY2UKICAgICAgICAgICAgICAgICAgJDEwICBNb3ZpZS92aWRlbyBzY3JlZW4gY2FwdHVyZQogICAgICAgICAgICAgICAgICAkMTEgIEEgYnJpZ2h0IGNvbG91cmVkIGZpc2gKICAgICAgICAgICAgICAgICAgJDEyICBJbGx1c3RyYXRpb24KICAgICAgICAgICAgICAgICAgJDEzICBCYW5kL2FydGlzdCBsb2dvdHlwZQogICAgICAgICAgICAgICAgICAkMTQgIFB1Ymxpc2hlci9TdHVkaW8gbG9nb3R5cGUKCgo0LjE1LiAgIEdlbmVyYWwgZW5jYXBzdWxhdGVkIG9iamVjdAoKICAgSW4gdGhpcyBmcmFtZSBhbnkgdHlwZSBvZiBmaWxlIGNhbiBiZSBlbmNhcHN1bGF0ZWQuIEFmdGVyIHRoZSBoZWFkZXIsCiAgICdGcmFtZSBzaXplJyBhbmQgJ0VuY29kaW5nJyBmb2xsb3dzICdNSU1FIHR5cGUnIFtNSU1FXSByZXByZXNlbnRlZCBhcwogICBhcyBhIHRlcm1pbmF0ZWQgc3RyaW5nIGVuY29kZWQgd2l0aCBJU08gODg1OS0xIFtJU08tODg1OS0xXS4gVGhlCiAgIGZpbGVuYW1lIGlzIGNhc2Ugc2Vuc2l0aXZlIGFuZCBpcyBlbmNvZGVkIGFzICdFbmNvZGluZycuIFRoZW4gZm9sbG93cwogICBhIGNvbnRlbnQgZGVzY3JpcHRpb24gYXMgdGVybWluYXRlZCBzdHJpbmcsIGVuY29kZWQgYXMgJ0VuY29kaW5nJy4KICAgVGhlIGxhc3QgdGhpbmcgaW4gdGhlIGZyYW1lIGlzIHRoZSBhY3R1YWwgb2JqZWN0LiBUaGUgZmlyc3QgdHdvCiAgIHN0cmluZ3MgbWF5IGJlIG9taXR0ZWQsIGxlYXZpbmcgb25seSB0aGVpciB0ZXJtaW5hdGlvbnMuIE1JTUUgdHlwZSBpcwogICBhbHdheXMgYW4gSVNPLTg4NTktMSB0ZXh0IHN0cmluZy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIkdFT0IiCiAgIGZyYW1lIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSBjb250ZW50IGRlc2NyaXB0b3IuCgogICAgIDxIZWFkZXIgZm9yICdHZW5lcmFsIGVuY2Fwc3VsYXRlZCBvYmplY3QnLCBJRDogIkdFT0IiPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICAgJHh4CiAgICAgTUlNRSB0eXBlICAgICAgICAgICAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIEZpbGVuYW1lICAgICAgICAgICAgICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4gJDAwICgwMCkKICAgICBDb250ZW50IGRlc2NyaXB0aW9uICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgRW5jYXBzdWxhdGVkIG9iamVjdCAgICA8YmluYXJ5IGRhdGE+CgoKNC4xNi4gICBQbGF5IGNvdW50ZXIKCiAgIFRoaXMgaXMgc2ltcGx5IGEgY291bnRlciBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgZmlsZSBoYXMgYmVlbgogICBwbGF5ZWQuIFRoZSB2YWx1ZSBpcyBpbmNyZWFzZWQgYnkgb25lIGV2ZXJ5IHRpbWUgdGhlIGZpbGUgYmVnaW5zIHRvCiAgIHBsYXkuIFRoZXJlIG1heSBvbmx5IGJlIG9uZSAiUENOVCIgZnJhbWUgaW4gZWFjaCB0YWcuIFdoZW4gdGhlCiAgIGNvdW50ZXIgcmVhY2hlcyBhbGwgb25lJ3MsIG9uZSBieXRlIGlzIGluc2VydGVkIGluIGZyb250IG9mIHRoZQogICBjb3VudGVyIHRodXMgbWFraW5nIHRoZSBjb3VudGVyIGVpZ2h0IGJpdHMgYmlnZ2VyLiAgVGhlIGNvdW50ZXIgbXVzdAogICBiZSBhdCBsZWFzdCAzMi1iaXRzIGxvbmcgdG8gYmVnaW4gd2l0aC4KCiAgICAgPEhlYWRlciBmb3IgJ1BsYXkgY291bnRlcicsIElEOiAiUENOVCI+CiAgICAgQ291bnRlciAgICAgICAgJHh4IHh4IHh4IHh4ICh4eCAuLi4pCgoKNC4xNy4gICBQb3B1bGFyaW1ldGVyCgogICBUaGUgcHVycG9zZSBvZiB0aGlzIGZyYW1lIGlzIHRvIHNwZWNpZnkgaG93IGdvb2QgYW4gYXVkaW8gZmlsZSBpcy4KICAgTWFueSBpbnRlcmVzdGluZyBhcHBsaWNhdGlvbnMgY291bGQgYmUgZm91bmQgdG8gdGhpcyBmcmFtZSBzdWNoIGFzIGEKICAgcGxheWxpc3QgdGhhdCBmZWF0dXJlcyBiZXR0ZXIgYXVkaW8gZmlsZXMgbW9yZSBvZnRlbiB0aGFuIG90aGVycyBvcgogICBpdCBjb3VsZCBiZSB1c2VkIHRvIHByb2ZpbGUgYSBwZXJzb24ncyB0YXN0ZSBhbmQgZmluZCBvdGhlciAnZ29vZCcKICAgZmlsZXMgYnkgY29tcGFyaW5nIHBlb3BsZSdzIHByb2ZpbGVzLiBUaGUgZnJhbWUgY29udGFpbnMgdGhlIGVtYWlsCiAgIGFkZHJlc3MgdG8gdGhlIHVzZXIsIG9uZSByYXRpbmcgYnl0ZSBhbmQgYSBmb3VyIGJ5dGUgcGxheSBjb3VudGVyLAogICBpbnRlbmRlZCB0byBiZSBpbmNyZWFzZWQgd2l0aCBvbmUgZm9yIGV2ZXJ5IHRpbWUgdGhlIGZpbGUgaXMgcGxheWVkLgogICBUaGUgZW1haWwgaXMgYSB0ZXJtaW5hdGVkIHN0cmluZy4gVGhlIHJhdGluZyBpcyAxLTI1NSB3aGVyZSAxIGlzCiAgIHdvcnN0IGFuZCAyNTUgaXMgYmVzdC4gMCBpcyB1bmtub3duLiBJZiBubyBwZXJzb25hbCBjb3VudGVyIGlzIHdhbnRlZAogICBpdCBtYXkgYmUgb21pdHRlZC4gV2hlbiB0aGUgY291bnRlciByZWFjaGVzIGFsbCBvbmUncywgb25lIGJ5dGUgaXMKICAgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgdGhlIGNvdW50ZXIgdGh1cyBtYWtpbmcgdGhlIGNvdW50ZXIgZWlnaHQgYml0cwogICBiaWdnZXIgaW4gdGhlIHNhbWUgYXdheSBhcyB0aGUgcGxheSBjb3VudGVyICgiUENOVCIpLiBUaGVyZSBtYXkgYmUKICAgbW9yZSB0aGFuIG9uZSAiUE9QTSIgZnJhbWUgaW4gZWFjaCB0YWcsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lCiAgIGVtYWlsIGFkZHJlc3MuCgogICAgIDxIZWFkZXIgZm9yICdQb3B1bGFyaW1ldGVyJywgSUQ6ICJQT1BNIj4KICAgICBFbWFpbCB0byB1c2VyICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBSYXRpbmcgICAgICAgICAgJHh4CiAgICAgQ291bnRlciAgICAgICAgICR4eCB4eCB4eCB4eCAoeHggLi4uKQoKCjQuMTguICAgUmVjb21tZW5kZWQgYnVmZmVyIHNpemUKCiAgIFNvbWV0aW1lcyB0aGUgc2VydmVyIGZyb20gd2hpY2ggYW4gYXVkaW8gZmlsZSBpcyBzdHJlYW1lZCBpcyBhd2FyZSBvZgogICB0cmFuc21pc3Npb24gb3IgY29kaW5nIHByb2JsZW1zIHJlc3VsdGluZyBpbiBpbnRlcnJ1cHRpb25zIGluIHRoZQogICBhdWRpbyBzdHJlYW0uIEluIHRoZXNlIGNhc2VzLCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGNhbiBiZQogICByZWNvbW1lbmRlZCBieSB0aGUgc2VydmVyIHVzaW5nIHRoaXMgZnJhbWUuIElmIHRoZSAnZW1iZWRkZWQgaW5mbwogICBmbGFnJyBpcyB0cnVlICgxKSB0aGVuIHRoaXMgaW5kaWNhdGVzIHRoYXQgYW4gSUQzIHRhZyB3aXRoIHRoZQogICBtYXhpbXVtIHNpemUgZGVzY3JpYmVkIGluICdCdWZmZXIgc2l6ZScgbWF5IG9jY3VyIGluIHRoZSBhdWRpbwogICBzdHJlYW0uIEluIHN1Y2ggY2FzZSB0aGUgdGFnIHNob3VsZCByZXNpZGUgYmV0d2VlbiB0d28gTVBFRyBbTVBFR10KICAgZnJhbWVzLCBpZiB0aGUgYXVkaW8gaXMgTVBFRyBlbmNvZGVkLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgdGFnCiAgIGlzIGtub3duLCAnb2Zmc2V0IHRvIG5leHQgdGFnJyBtYXkgYmUgdXNlZC4gVGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkCiAgIGZyb20gdGhlIGVuZCBvZiB0YWcgaW4gd2hpY2ggdGhpcyBmcmFtZSByZXNpZGVzIHRvIHRoZSBmaXJzdCBieXRlIG9mCiAgIHRoZSBoZWFkZXIgaW4gdGhlIG5leHQuIFRoaXMgZmllbGQgbWF5IGJlIG9taXR0ZWQuIEVtYmVkZGVkIHRhZ3MgYXJlCiAgIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgc2luY2UgdGhpcyBjb3VsZCByZW5kZXIgdW5wcmVkaWN0YWJsZQogICBiZWhhdmlvdXIgZnJvbSBwcmVzZW50IHNvZnR3YXJlL2hhcmR3YXJlLgoKICAgRm9yIGFwcGxpY2F0aW9ucyBsaWtlIHN0cmVhbWluZyBhdWRpbyBpdCBtaWdodCBiZSBhbiBpZGVhIHRvIGVtYmVkCiAgIHRhZ3MgaW50byB0aGUgYXVkaW8gc3RyZWFtIHRob3VnaC4gSWYgdGhlIGNsaWVudHMgY29ubmVjdHMgdG8KICAgaW5kaXZpZHVhbCBjb25uZWN0aW9ucyBsaWtlIEhUVFAgYW5kIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdG8gYmVnaW4KICAgZXZlcnkgdHJhbnNtaXNzaW9uIHdpdGggYSB0YWcsIHRoZW4gdGhpcyB0YWcgc2hvdWxkIGluY2x1ZGUgYQogICAncmVjb21tZW5kZWQgYnVmZmVyIHNpemUnIGZyYW1lLiBJZiB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0byBhCiAgIGFyYml0cmFyeSBwb2ludCBpbiB0aGUgc3RyZWFtLCBzdWNoIGFzIHJhZGlvIG9yIG11bHRpY2FzdCwgdGhlbiB0aGUKICAgJ3JlY29tbWVuZGVkIGJ1ZmZlciBzaXplJyBmcmFtZSBTSE9VTEQgYmUgaW5jbHVkZWQgaW4gZXZlcnkgdGFnLgoKICAgVGhlICdCdWZmZXIgc2l6ZScgc2hvdWxkIGJlIGtlcHQgdG8gYSBtaW5pbXVtLiBUaGVyZSBtYXkgb25seSBiZSBvbmUKICAgIlJCVUYiIGZyYW1lIGluIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnUmVjb21tZW5kZWQgYnVmZmVyIHNpemUnLCBJRDogIlJCVUYiPgogICAgIEJ1ZmZlciBzaXplICAgICAgICAgICAgICAgJHh4IHh4IHh4CiAgICAgRW1iZWRkZWQgaW5mbyBmbGFnICAgICAgICAlMDAwMDAwMHgKICAgICBPZmZzZXQgdG8gbmV4dCB0YWcgICAgICAgICR4eCB4eCB4eCB4eAoKCjQuMTkuICAgQXVkaW8gZW5jcnlwdGlvbgoKICAgVGhpcyBmcmFtZSBpbmRpY2F0ZXMgaWYgdGhlIGFjdHVhbCBhdWRpbyBzdHJlYW0gaXMgZW5jcnlwdGVkLCBhbmQgYnkKICAgd2hvbS4gU2luY2Ugc3RhbmRhcmRpc2F0aW9uIG9mIHN1Y2ggZW5jcnlwdGlvbiBzY2hlbWUgaXMgYmV5b25kIHRoaXMKICAgZG9jdW1lbnQsIGFsbCAiQUVOQyIgZnJhbWVzIGJlZ2luIHdpdGggYSB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEKICAgVVJMIGNvbnRhaW5pbmcgYW4gZW1haWwgYWRkcmVzcywgb3IgYSBsaW5rIHRvIGEgbG9jYXRpb24gd2hlcmUgYW4KICAgZW1haWwgYWRkcmVzcyBjYW4gYmUgZm91bmQsIHRoYXQgYmVsb25ncyB0byB0aGUgb3JnYW5pc2F0aW9uCiAgIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNwZWNpZmljIGVuY3J5cHRlZCBhdWRpbyBmaWxlLiBRdWVzdGlvbnMKICAgcmVnYXJkaW5nIHRoZSBlbmNyeXB0ZWQgYXVkaW8gc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGVtYWlsIGFkZHJlc3MKICAgc3BlY2lmaWVkLiBJZiBhICQwMCBpcyBmb3VuZCBkaXJlY3RseSBhZnRlciB0aGUgJ0ZyYW1lIHNpemUnIGFuZCB0aGUKICAgYXVkaW8gZmlsZSBpbmRlZWQgaXMgZW5jcnlwdGVkLCB0aGUgd2hvbGUgZmlsZSBtYXkgYmUgY29uc2lkZXJlZAogICB1c2VsZXNzLgoKICAgQWZ0ZXIgdGhlICdPd25lciBpZGVudGlmaWVyJywgYSBwb2ludGVyIHRvIGFuIHVuZW5jcnlwdGVkIHBhcnQgb2YgdGhlCiAgIGF1ZGlvIGNhbiBiZSBzcGVjaWZpZWQuIFRoZSAnUHJldmlldyBzdGFydCcgYW5kICdQcmV2aWV3IGxlbmd0aCcgaXMKICAgZGVzY3JpYmVkIGluIGZyYW1lcy4gSWYgbm8gcGFydCBpcyB1bmVuY3J5cHRlZCwgdGhlc2UgZmllbGRzIHNob3VsZAogICBiZSBsZWZ0IHplcm9lZC4gQWZ0ZXIgdGhlICdwcmV2aWV3IGxlbmd0aCcgZmllbGQgZm9sbG93cyBvcHRpb25hbGx5IGEKICAgZGF0YSBibG9jayByZXF1aXJlZCBmb3IgZGVjcnlwdGlvbiBvZiB0aGUgYXVkaW8uIFRoZXJlIG1heSBiZSBtb3JlCiAgIHRoYW4gb25lICJBRU5DIiBmcmFtZXMgaW4gYSB0YWcsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lICdPd25lcgogICBpZGVudGlmaWVyJy4KCiAgICAgPEhlYWRlciBmb3IgJ0F1ZGlvIGVuY3J5cHRpb24nLCBJRDogIkFFTkMiPgogICAgIE93bmVyIGlkZW50aWZpZXIgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIFByZXZpZXcgc3RhcnQgICAgICAkeHggeHgKICAgICBQcmV2aWV3IGxlbmd0aCAgICAgJHh4IHh4CiAgICAgRW5jcnlwdGlvbiBpbmZvICAgIDxiaW5hcnkgZGF0YT4KCgo0LjIwLiAgIExpbmtlZCBpbmZvcm1hdGlvbgoKICAgVG8ga2VlcCBpbmZvcm1hdGlvbiBkdXBsaWNhdGlvbiBhcyBsb3cgYXMgcG9zc2libGUgdGhpcyBmcmFtZSBtYXkgYmUKICAgdXNlZCB0byBsaW5rIGluZm9ybWF0aW9uIGZyb20gYW5vdGhlciBJRDN2MiB0YWcgdGhhdCBtaWdodCByZXNpZGUgaW4KICAgYW5vdGhlciBhdWRpbyBmaWxlIG9yIGFsb25lIGluIGEgYmluYXJ5IGZpbGUuIEl0IGlzIFJFQ09NTUVOREVEIHRoYXQKICAgdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHdoZW4gdGhlIGZpbGVzIGFyZSBzdG9yZWQgb24gYSBDRC1ST00gb3IKICAgb3RoZXIgY2lyY3Vtc3RhbmNlcyB3aGVuIHRoZSByaXNrIG9mIGZpbGUgc2VwYXJhdGlvbiBpcyBsb3cuIFRoZQogICBmcmFtZSBjb250YWlucyBhIGZyYW1lIGlkZW50aWZpZXIsIHdoaWNoIGlzIHRoZSBmcmFtZSB0aGF0IHNob3VsZCBiZQogICBsaW5rZWQgaW50byB0aGlzIHRhZywgYSBVUkwgW1VSTF0gZmllbGQsIHdoZXJlIGEgcmVmZXJlbmNlIHRvIHRoZQogICBmaWxlIHdoZXJlIHRoZSBmcmFtZSBpcyBnaXZlbiwgYW5kIGFkZGl0aW9uYWwgSUQgZGF0YSwgaWYgbmVlZGVkLgogICBEYXRhIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZmlyc3QgdGFnIGZvdW5kIGluIHRoZSBmaWxlIHRvCiAgIHdoaWNoIHRoaXMgbGluayBwb2ludHMuIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICJMSU5LIiBmcmFtZSBpbiBhCiAgIHRhZywgYnV0IG9ubHkgb25lIHdpdGggdGhlIHNhbWUgY29udGVudHMuIEEgbGlua2VkIGZyYW1lIGlzIHRvIGJlCiAgIGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUgdGFnIGFuZCBoYXMgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGlmIGl0CiAgIHdhcyBhIHBoeXNpY2FsIHBhcnQgb2YgdGhlIHRhZyAoaS5lLiBvbmx5IG9uZSAiUlZSQiIgZnJhbWUgYWxsb3dlZCwKICAgd2hldGhlciBpdCdzIGxpbmtlZCBvciBub3QpLgoKICAgICA8SGVhZGVyIGZvciAnTGlua2VkIGluZm9ybWF0aW9uJywgSUQ6ICJMSU5LIj4KICAgICBGcmFtZSBpZGVudGlmaWVyICAgICAgICAkeHggeHggeHggeHgKICAgICBVUkwgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIElEIGFuZCBhZGRpdGlvbmFsIGRhdGEgIDx0ZXh0IHN0cmluZyhzKT4KCiAgIEZyYW1lcyB0aGF0IG1heSBiZSBsaW5rZWQgYW5kIG5lZWQgbm8gYWRkaXRpb25hbCBkYXRhIGFyZSAiQVNQSSIsCiAgICJFVENPIiwgIkVRVTIiLCAiTUNJRCIsICJNTExUIiwgIk9XTkUiLCAiUlZBMiIsICJSVlJCIiwgIlNZVEMiLCB0aGUKICAgdGV4dCBpbmZvcm1hdGlvbiBmcmFtZXMgYW5kIHRoZSBVUkwgbGluayBmcmFtZXMuCgogICBUaGUgIkFFTkMiLCAiQVBJQyIsICJHRU9CIiBhbmQgIlRYWFgiIGZyYW1lcyBtYXkgYmUgbGlua2VkIHdpdGgKICAgdGhlIGNvbnRlbnQgZGVzY3JpcHRvciBhcyBhZGRpdGlvbmFsIElEIGRhdGEuCgogICBUaGUgIlVTRVIiIGZyYW1lIG1heSBiZSBsaW5rZWQgd2l0aCB0aGUgbGFuZ3VhZ2UgZmllbGQgYXMgYWRkaXRpb25hbAogICBJRCBkYXRhLgogICAKICAgVGhlICJQUklWIiBmcmFtZSBtYXkgYmUgbGlua2VkIHdpdGggdGhlIG93bmVyIGlkZW50aWZpZXIgYXMKICAgYWRkaXRpb25hbCBJRCBkYXRhLgoKICAgVGhlICJDT01NIiwgIlNZTFQiIGFuZCAiVVNMVCIgZnJhbWVzIG1heSBiZSBsaW5rZWQgd2l0aCB0aHJlZSBieXRlcwogICBvZiBsYW5ndWFnZSBkZXNjcmlwdG9yIGRpcmVjdGx5IGZvbGxvd2VkIGJ5IGEgY29udGVudCBkZXNjcmlwdG9yIGFzCiAgIGFkZGl0aW9uYWwgSUQgZGF0YS4KCgo0LjIxLiAgIFBvc2l0aW9uIHN5bmNocm9uaXNhdGlvbiBmcmFtZQoKICAgVGhpcyBmcmFtZSBkZWxpdmVycyBpbmZvcm1hdGlvbiB0byB0aGUgbGlzdGVuZXIgb2YgaG93IGZhciBpbnRvIHRoZQogICBhdWRpbyBzdHJlYW0gaGUgcGlja2VkIHVwOyBpbiBlZmZlY3QsIGl0IHN0YXRlcyB0aGUgdGltZSBvZmZzZXQgZnJvbQogICB0aGUgZmlyc3QgZnJhbWUgaW4gdGhlIHN0cmVhbS4gVGhlIGZyYW1lIGxheW91dCBpczoKCiAgICAgPEhlYWQgZm9yICdQb3NpdGlvbiBzeW5jaHJvbmlzYXRpb24nLCBJRDogIlBPU1MiPgogICAgIFRpbWUgc3RhbXAgZm9ybWF0ICAgICAgICAgJHh4CiAgICAgUG9zaXRpb24gICAgICAgICAgICAgICAgICAkeHggKHh4IC4uLikKCiAgIFdoZXJlIHRpbWUgc3RhbXAgZm9ybWF0IGlzOgoKICAgICAkMDEgIEFic29sdXRlIHRpbWUsIDMyIGJpdCBzaXplZCwgdXNpbmcgTVBFRyBmcmFtZXMgYXMgdW5pdAogICAgICQwMiAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBtaWxsaXNlY29uZHMgYXMgdW5pdAoKICAgYW5kIHBvc2l0aW9uIGlzIHdoZXJlIGluIHRoZSBhdWRpbyB0aGUgbGlzdGVuZXIgc3RhcnRzIHRvIHJlY2VpdmUsCiAgIGkuZS4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBmcmFtZS4gSWYgdGhpcyBmcmFtZSBpcyB1c2VkIGluIHRoZQogICBiZWdpbm5pbmcgb2YgYSBmaWxlIHRoZSB2YWx1ZSBpcyBhbHdheXMgMC4gVGhlcmUgbWF5IG9ubHkgYmUgb25lCiAgICJQT1NTIiBmcmFtZSBpbiBlYWNoIHRhZy4KCgo0LjIyLiAgIFRlcm1zIG9mIHVzZSBmcmFtZQoKICAgVGhpcyBmcmFtZSBjb250YWlucyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXJtcyBvZiB1c2UgYW5kCiAgIG93bmVyc2hpcCBvZiB0aGUgZmlsZS4gTW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZSBsZWdhbAogICB0ZXJtcyBtaWdodCBiZSBhdmFpbGFibGUgdGhyb3VnaCB0aGUgIldDT1AiIGZyYW1lLiBOZXdsaW5lcyBhcmUKICAgYWxsb3dlZCBpbiB0aGUgdGV4dC4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgJ1Rlcm1zIG9mIHVzZScgZnJhbWUKICAgaW4gYSB0YWcsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lICdMYW5ndWFnZScuCgogICAgIDxIZWFkZXIgZm9yICdUZXJtcyBvZiB1c2UgZnJhbWUnLCBJRDogIlVTRVIiPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICR4eAogICAgIExhbmd1YWdlICAgICAgICAgICAgICR4eCB4eCB4eAogICAgIFRoZSBhY3R1YWwgdGV4dCAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC4yMy4gICBPd25lcnNoaXAgZnJhbWUKCiAgIFRoZSBvd25lcnNoaXAgZnJhbWUgbWlnaHQgYmUgdXNlZCBhcyBhIHJlbWluZGVyIG9mIGEgbWFkZSB0cmFuc2FjdGlvbgogICBvciwgaWYgc2lnbmVkLCBhcyBwcm9vZi4gTm90ZSB0aGF0IHRoZSAiVVNFUiIgYW5kICJUT1dOIiBmcmFtZXMgYXJlCiAgIGdvb2QgdG8gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBvbmUuIFRoZSBmcmFtZSBiZWdpbnMsIGFmdGVyIHRoZQogICBmcmFtZSBJRCwgc2l6ZSBhbmQgZW5jb2RpbmcgZmllbGRzLCB3aXRoIGEgJ3ByaWNlIHBhaWQnIGZpZWxkLiBUaGUKICAgZmlyc3QgdGhyZWUgY2hhcmFjdGVycyBvZiB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBjdXJyZW5jeSB1c2VkIGZvcgogICB0aGUgdHJhbnNhY3Rpb24sIGVuY29kZWQgYWNjb3JkaW5nIHRvIElTTyA0MjE3IFtJU08tNDIxN10gYWxwaGFiZXRpYwogICBjdXJyZW5jeSBjb2RlLiBDb25jYXRlbmF0ZWQgdG8gdGhpcyBpcyB0aGUgYWN0dWFsIHByaWNlIHBhaWQsIGFzIGEKICAgbnVtZXJpY2FsIHN0cmluZyB1c2luZyAiLiIgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLiBOZXh0IGlzIGFuIDgKICAgY2hhcmFjdGVyIGRhdGUgc3RyaW5nIChZWVlZTU1ERCkgZm9sbG93ZWQgYnkgYSBzdHJpbmcgd2l0aCB0aGUgbmFtZQogICBvZiB0aGUgc2VsbGVyIGFzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBmcmFtZS4gVGhlcmUgbWF5IG9ubHkgYmUgb25lCiAgICJPV05FIiBmcmFtZSBpbiBhIHRhZy4KCiAgICAgPEhlYWRlciBmb3IgJ093bmVyc2hpcCBmcmFtZScsIElEOiAiT1dORSI+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgJHh4CiAgICAgUHJpY2UgcGFpZCAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBEYXRlIG9mIHB1cmNoLiAgICA8dGV4dCBzdHJpbmc+CiAgICAgU2VsbGVyICAgICAgICAgICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4KCgo0LjI0LiAgIENvbW1lcmNpYWwgZnJhbWUKCiAgIFRoaXMgZnJhbWUgZW5hYmxlcyBzZXZlcmFsIGNvbXBldGluZyBvZmZlcnMgaW4gdGhlIHNhbWUgdGFnIGJ5CiAgIGJ1bmRsaW5nIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBmcmFtZSByYXRoZXIgY29tcGxleAogICBidXQgaXQncyBhbiBlYXNpZXIgc29sdXRpb24gdGhhbiBpZiBvbmUgdHJpZXMgdG8gYWNoaWV2ZSB0aGUgc2FtZQogICByZXN1bHQgd2l0aCBzZXZlcmFsIGZyYW1lcy4gVGhlIGZyYW1lIGJlZ2lucywgYWZ0ZXIgdGhlIGZyYW1lIElELAogICBzaXplIGFuZCBlbmNvZGluZyBmaWVsZHMsIHdpdGggYSBwcmljZSBzdHJpbmcgZmllbGQuIEEgcHJpY2UgaXMKICAgY29uc3RydWN0ZWQgYnkgb25lIHRocmVlIGNoYXJhY3RlciBjdXJyZW5jeSBjb2RlLCBlbmNvZGVkIGFjY29yZGluZwogICB0byBJU08gNDIxNyBbSVNPLTQyMTddIGFscGhhYmV0aWMgY3VycmVuY3kgY29kZSwgZm9sbG93ZWQgYnkgYQogICBudW1lcmljYWwgdmFsdWUgd2hlcmUgIi4iIGlzIHVzZWQgYXMgZGVjaW1hbCBzZXBhcmF0b3IuIEluIHRoZSBwcmljZQogICBzdHJpbmcgc2V2ZXJhbCBwcmljZXMgbWF5IGJlIGNvbmNhdGVuYXRlZCwgc2VwYXJhdGVkIGJ5IGEgIi8iCiAgIGNoYXJhY3RlciwgYnV0IHRoZXJlIG1heSBvbmx5IGJlIG9uZSBjdXJyZW5jeSBvZiBlYWNoIHR5cGUuCgogICBUaGUgcHJpY2Ugc3RyaW5nIGlzIGZvbGxvd2VkIGJ5IGFuIDggY2hhcmFjdGVyIGRhdGUgc3RyaW5nIGluIHRoZQogICBmb3JtYXQgWVlZWU1NREQsIGRlc2NyaWJpbmcgZm9yIGhvdyBsb25nIHRoZSBwcmljZSBpcyB2YWxpZC4gQWZ0ZXIKICAgdGhhdCBpcyBhIGNvbnRhY3QgVVJMLCB3aXRoIHdoaWNoIHRoZSB1c2VyIGNhbiBjb250YWN0IHRoZSBzZWxsZXIsCiAgIGZvbGxvd2VkIGJ5IGEgb25lIGJ5dGUgJ3JlY2VpdmVkIGFzJyBmaWVsZC4gSXQgZGVzY3JpYmVzIGhvdyB0aGUKICAgYXVkaW8gaXMgZGVsaXZlcmVkIHdoZW4gYm91Z2h0IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGxpc3Q6CgogICAgICAgICQwMCAgT3RoZXIKICAgICAgICAkMDEgIFN0YW5kYXJkIENEIGFsYnVtIHdpdGggb3RoZXIgc29uZ3MKICAgICAgICAkMDIgIENvbXByZXNzZWQgYXVkaW8gb24gQ0QKICAgICAgICAkMDMgIEZpbGUgb3ZlciB0aGUgSW50ZXJuZXQKICAgICAgICAkMDQgIFN0cmVhbSBvdmVyIHRoZSBJbnRlcm5ldAogICAgICAgICQwNSAgQXMgbm90ZSBzaGVldHMKICAgICAgICAkMDYgIEFzIG5vdGUgc2hlZXRzIGluIGEgYm9vayB3aXRoIG90aGVyIHNoZWV0cwogICAgICAgICQwNyAgTXVzaWMgb24gb3RoZXIgbWVkaWEKICAgICAgICAkMDggIE5vbi1tdXNpY2FsIG1lcmNoYW5kaXNlCgogICBOZXh0IGZvbGxvd3MgYSB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzZWxsZXIgZm9sbG93ZWQKICAgYnkgYSB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHByb2R1Y3QuIFRoZQogICBsYXN0IHRoaW5nIGlzIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgYSBjb21wYW55IGxvZ290eXBlLiBUaGUgZmlyc3Qgb2YKICAgdGhlbSBpcyB0aGUgJ1BpY3R1cmUgTUlNRSB0eXBlJyBmaWVsZCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0CiAgIHdoaWNoIHBpY3R1cmUgZm9ybWF0IGlzIHVzZWQuIEluIHRoZSBldmVudCB0aGF0IHRoZSBNSU1FIG1lZGlhIHR5cGUKICAgbmFtZSBpcyBvbWl0dGVkLCAiaW1hZ2UvIiB3aWxsIGJlIGltcGxpZWQuIEN1cnJlbnRseSBvbmx5ICJpbWFnZS9wbmciCiAgIGFuZCAiaW1hZ2UvanBlZyIgYXJlIGFsbG93ZWQuIFRoaXMgZm9ybWF0IHN0cmluZyBpcyBmb2xsb3dlZCBieSB0aGUKICAgYmluYXJ5IHBpY3R1cmUgZGF0YS4gVGhpcyB0d28gbGFzdCBmaWVsZHMgbWF5IGJlIG9taXR0ZWQgaWYgbm8KICAgcGljdHVyZSBpcyBhdHRhY2hlZC4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgJ2NvbW1lcmNpYWwgZnJhbWUnIGluCiAgIGEgdGFnLCBidXQgbm8gdHdvIG1heSBiZSBpZGVudGljYWwuCgogICAgIDxIZWFkZXIgZm9yICdDb21tZXJjaWFsIGZyYW1lJywgSUQ6ICJDT01SIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgJHh4CiAgICAgUHJpY2Ugc3RyaW5nICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgVmFsaWQgdW50aWwgICAgICAgIDx0ZXh0IHN0cmluZz4KICAgICBDb250YWN0IFVSTCAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBSZWNlaXZlZCBhcyAgICAgICAgJHh4CiAgICAgTmFtZSBvZiBzZWxsZXIgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgRGVzY3JpcHRpb24gICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgUGljdHVyZSBNSU1FIHR5cGUgIDxzdHJpbmc+ICQwMAogICAgIFNlbGxlciBsb2dvICAgICAgICA8YmluYXJ5IGRhdGE+CgoKNC4yNS4gICBFbmNyeXB0aW9uIG1ldGhvZCByZWdpc3RyYXRpb24KCiAgIFRvIGlkZW50aWZ5IHdpdGggd2hpY2ggbWV0aG9kIGEgZnJhbWUgaGFzIGJlZW4gZW5jcnlwdGVkIHRoZQogICBlbmNyeXB0aW9uIG1ldGhvZCBtdXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIHRhZyB3aXRoIHRoaXMgZnJhbWUuIFRoZQogICAnT3duZXIgaWRlbnRpZmllcicgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBVUkwgW1VSTF0KICAgY29udGFpbmluZyBhbiBlbWFpbCBhZGRyZXNzLCBvciBhIGxpbmsgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBlbWFpbAogICBhZGRyZXNzIGNhbiBiZSBmb3VuZCwgdGhhdCBiZWxvbmdzIHRvIHRoZSBvcmdhbmlzYXRpb24gcmVzcG9uc2libGUKICAgZm9yIHRoaXMgc3BlY2lmaWMgZW5jcnlwdGlvbiBtZXRob2QuIFF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlCiAgIGVuY3J5cHRpb24gbWV0aG9kIHNob3VsZCBiZSBzZW50IHRvIHRoZSBpbmRpY2F0ZWQgZW1haWwgYWRkcmVzcy4gVGhlCiAgICdNZXRob2Qgc3ltYm9sJyBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWV0aG9kCiAgIHRocm91Z2hvdXQgdGhlIHdob2xlIHRhZywgaW4gdGhlIHJhbmdlICQ4MC1GMC4gQWxsIG90aGVyIHZhbHVlcyBhcmUKICAgcmVzZXJ2ZWQuIFRoZSAnTWV0aG9kIHN5bWJvbCcgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkKICAgZW5jcnlwdGlvbiBzcGVjaWZpYyBkYXRhLiBUaGVyZSBtYXkgYmUgc2V2ZXJhbCAiRU5DUiIgZnJhbWVzIGluIGEgdGFnCiAgIGJ1dCBvbmx5IG9uZSBjb250YWluaW5nIHRoZSBzYW1lIHN5bWJvbCBhbmQgb25seSBvbmUgY29udGFpbmluZyB0aGUKICAgc2FtZSBvd25lciBpZGVudGlmaWVyLiBUaGUgbWV0aG9kIG11c3QgYmUgdXNlZCBzb21ld2hlcmUgaW4gdGhlIHRhZy4KICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZnJhbWUgZW5jcnlwdGlvbiBmbGFnIGluIHRoZSBJRDN2MgogICBzdHJ1Y3R1cmUgZG9jdW1lbnQgW0lEM3YyLXN0cmN0XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgPEhlYWRlciBmb3IgJ0VuY3J5cHRpb24gbWV0aG9kIHJlZ2lzdHJhdGlvbicsIElEOiAiRU5DUiI+CiAgICAgT3duZXIgaWRlbnRpZmllciAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIE1ldGhvZCBzeW1ib2wgICAgICAgJHh4CiAgICAgRW5jcnlwdGlvbiBkYXRhICAgICA8YmluYXJ5IGRhdGE+CgoKNC4yNi4gICBHcm91cCBpZGVudGlmaWNhdGlvbiByZWdpc3RyYXRpb24KCiAgIFRoaXMgZnJhbWUgZW5hYmxlcyBncm91cGluZyBvZiBvdGhlcndpc2UgdW5yZWxhdGVkIGZyYW1lcy4gVGhpcyBjYW4KICAgYmUgdXNlZCB3aGVuIHNvbWUgZnJhbWVzIGFyZSB0byBiZSBzaWduZWQuIFRvIGlkZW50aWZ5IHdoaWNoIGZyYW1lcwogICBiZWxvbmdzIHRvIGEgc2V0IG9mIGZyYW1lcyBhIGdyb3VwIGlkZW50aWZpZXIgbXVzdCBiZSByZWdpc3RlcmVkIGluCiAgIHRoZSB0YWcgd2l0aCB0aGlzIGZyYW1lLiBUaGUgJ093bmVyIGlkZW50aWZpZXInIGlzIGEgbnVsbC10ZXJtaW5hdGVkCiAgIHN0cmluZyB3aXRoIGEgVVJMIFtVUkxdIGNvbnRhaW5pbmcgYW4gZW1haWwgYWRkcmVzcywgb3IgYSBsaW5rIHRvIGEKICAgbG9jYXRpb24gd2hlcmUgYW4gZW1haWwgYWRkcmVzcyBjYW4gYmUgZm91bmQsIHRoYXQgYmVsb25ncyB0byB0aGUKICAgb3JnYW5pc2F0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIGdyb3VwaW5nLiBRdWVzdGlvbnMgcmVnYXJkaW5nIHRoZQogICBncm91cGluZyBzaG91bGQgYmUgc2VudCB0byB0aGUgaW5kaWNhdGVkIGVtYWlsIGFkZHJlc3MuIFRoZSAnR3JvdXAKICAgc3ltYm9sJyBjb250YWlucyBhIHZhbHVlIHRoYXQgYXNzb2NpYXRlcyB0aGUgZnJhbWUgd2l0aCB0aGlzIGdyb3VwCiAgIHRocm91Z2hvdXQgdGhlIHdob2xlIHRhZywgaW4gdGhlIHJhbmdlICQ4MC1GMC4gQWxsIG90aGVyIHZhbHVlcyBhcmUKICAgcmVzZXJ2ZWQuIFRoZSAnR3JvdXAgc3ltYm9sJyBtYXkgb3B0aW9uYWxseSBiZSBmb2xsb3dlZCBieSBzb21lIGdyb3VwCiAgIHNwZWNpZmljIGRhdGEsIGUuZy4gYSBkaWdpdGFsIHNpZ25hdHVyZS4gVGhlcmUgbWF5IGJlIHNldmVyYWwgIkdSSUQiCiAgIGZyYW1lcyBpbiBhIHRhZyBidXQgb25seSBvbmUgY29udGFpbmluZyB0aGUgc2FtZSBzeW1ib2wgYW5kIG9ubHkgb25lCiAgIGNvbnRhaW5pbmcgdGhlIHNhbWUgb3duZXIgaWRlbnRpZmllci4gVGhlIGdyb3VwIHN5bWJvbCBtdXN0IGJlIHVzZWQKICAgc29tZXdoZXJlIGluIHRoZSB0YWcuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZyYW1lIGdyb3VwaW5nIGZsYWcKICAgaW4gdGhlIElEM3YyIHN0cnVjdHVyZSBkb2N1bWVudCBbSUQzdjItc3RyY3RdIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgICA8SGVhZGVyIGZvciAnR3JvdXAgSUQgcmVnaXN0cmF0aW9uJywgSUQ6ICJHUklEIj4KICAgICBPd25lciBpZGVudGlmaWVyICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBHcm91cCBzeW1ib2wgICAgICAgICAgJHh4CiAgICAgR3JvdXAgZGVwZW5kZW50IGRhdGEgIDxiaW5hcnkgZGF0YT4KCgo0LjI3LiAgIFByaXZhdGUgZnJhbWUKCiAgIFRoaXMgZnJhbWUgaXMgdXNlZCB0byBjb250YWluIGluZm9ybWF0aW9uIGZyb20gYSBzb2Z0d2FyZSBwcm9kdWNlcgogICB0aGF0IGl0cyBwcm9ncmFtIHVzZXMgYW5kIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBvdGhlciBmcmFtZXMuIFRoZQogICBmcmFtZSBjb25zaXN0cyBvZiBhbiAnT3duZXIgaWRlbnRpZmllcicgc3RyaW5nIGFuZCB0aGUgYmluYXJ5IGRhdGEuCiAgIFRoZSAnT3duZXIgaWRlbnRpZmllcicgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBVUkwgW1VSTF0KICAgY29udGFpbmluZyBhbiBlbWFpbCBhZGRyZXNzLCBvciBhIGxpbmsgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBlbWFpbAogICBhZGRyZXNzIGNhbiBiZSBmb3VuZCwgdGhhdCBiZWxvbmdzIHRvIHRoZSBvcmdhbmlzYXRpb24gcmVzcG9uc2libGUKICAgZm9yIHRoZSBmcmFtZS4gUXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgZnJhbWUgc2hvdWxkIGJlIHNlbnQgdG8gdGhlCiAgIGluZGljYXRlZCBlbWFpbCBhZGRyZXNzLiBUaGUgdGFnIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmUgIlBSSVYiCiAgIGZyYW1lIGJ1dCBvbmx5IHdpdGggZGlmZmVyZW50IGNvbnRlbnRzLgoKICAgICA8SGVhZGVyIGZvciAnUHJpdmF0ZSBmcmFtZScsIElEOiAiUFJJViI+CiAgICAgT3duZXIgaWRlbnRpZmllciAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgVGhlIHByaXZhdGUgZGF0YSAgICAgIDxiaW5hcnkgZGF0YT4KCgo0LjI4LiAgIFNpZ25hdHVyZSBmcmFtZQoKICAgVGhpcyBmcmFtZSBlbmFibGVzIGEgZ3JvdXAgb2YgZnJhbWVzLCBncm91cGVkIHdpdGggdGhlICdHcm91cAogICBpZGVudGlmaWNhdGlvbiByZWdpc3RyYXRpb24nLCB0byBiZSBzaWduZWQuIEFsdGhvdWdoIHNpZ25hdHVyZXMgY2FuCiAgIHJlc2lkZSBpbnNpZGUgdGhlIHJlZ2lzdHJhdGlvbiBmcmFtZSwgaXQgbWlnaHQgYmUgZGVzaXJlZCB0byBzdG9yZQogICB0aGUgc2lnbmF0dXJlIGVsc2V3aGVyZSwgZS5nLiBpbiB3YXRlcm1hcmtzLiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuCiAgIG9uZSAnc2lnbmF0dXJlIGZyYW1lJyBpbiBhIHRhZywgYnV0IG5vIHR3byBtYXkgYmUgaWRlbnRpY2FsLgoKICAgICA8SGVhZGVyIGZvciAnU2lnbmF0dXJlIGZyYW1lJywgSUQ6ICJTSUdOIj4KICAgICBHcm91cCBzeW1ib2wgICAgICAkeHgKICAgICBTaWduYXR1cmUgICAgICAgICA8YmluYXJ5IGRhdGE+CgoKNC4yOS4gICBTZWVrIGZyYW1lCgogICBUaGlzIGZyYW1lIGluZGljYXRlcyB3aGVyZSBvdGhlciB0YWdzIGluIGEgZmlsZS9zdHJlYW0gY2FuIGJlIGZvdW5kLgogICBUaGUgJ21pbmltdW0gb2Zmc2V0IHRvIG5leHQgdGFnJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGVuZCBvZiB0aGlzCiAgIHRhZyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0LiBUaGVyZSBtYXkgb25seSBiZSBvbmUgJ3NlZWsgZnJhbWUnCiAgIGluIGEgdGFnLgoKICAgPEhlYWRlciBmb3IgJ1NlZWsgZnJhbWUnLCBJRDogIlNFRUsiPgogICBNaW5pbXVtIG9mZnNldCB0byBuZXh0IHRhZyAgICAgICAkeHggeHggeHggeHgKCgo0LjMwLiAgIEF1ZGlvIHNlZWsgcG9pbnQgaW5kZXgKCiAgIEF1ZGlvIGZpbGVzIHdpdGggdmFyaWFibGUgYml0IHJhdGVzIGFyZSBpbnRyaW5zaWNhbGx5IGRpZmZpY3VsdCB0bwogICBkZWFsIHdpdGggaW4gdGhlIGNhc2Ugb2Ygc2Vla2luZyB3aXRoaW4gdGhlIGZpbGUuIFRoZSBBU1BJIGZyYW1lCiAgIG1ha2VzIHNlZWtpbmcgZWFzaWVyIGJ5IHByb3ZpZGluZyBhIGxpc3QgYSBzZWVrIHBvaW50cyB3aXRoaW4gdGhlCiAgIGF1ZGlvIGZpbGUuIFRoZSBzZWVrIHBvaW50cyBhcmUgYSBmcmFjdGlvbmFsIG9mZnNldCB3aXRoaW4gdGhlIGF1ZGlvCiAgIGRhdGEsIHByb3ZpZGluZyBhIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gZmluZCBhbiBhcHByb3ByaWF0ZQogICBwb2ludCB0byBzdGFydCBkZWNvZGluZy4gVGhlIHByZXNlbmNlIG9mIGFuIEFTUEkgZnJhbWUgcmVxdWlyZXMgdGhlCiAgIGV4aXN0ZW5jZSBvZiBhIFRMRU4gZnJhbWUsIGluZGljYXRpbmcgdGhlIGR1cmF0aW9uIG9mIHRoZSBmaWxlIGluCiAgIG1pbGxpc2Vjb25kcy4gVGhlcmUgbWF5IG9ubHkgYmUgb25lICdhdWRpbyBzZWVrIHBvaW50IGluZGV4JyBmcmFtZSBpbgogICBhIHRhZy4KCiAgICAgPEhlYWRlciBmb3IgJ1NlZWsgUG9pbnQgSW5kZXgnLCBJRDogIkFTUEkiPgogICAgIEluZGV4ZWQgZGF0YSBzdGFydCAoUykgICAgICAgICAkeHggeHggeHggeHgKICAgICBJbmRleGVkIGRhdGEgbGVuZ3RoIChMKSAgICAgICAgJHh4IHh4IHh4IHh4CiAgICAgTnVtYmVyIG9mIGluZGV4IHBvaW50cyAoTikgICAgICR4eCB4eAogICAgIEJpdHMgcGVyIGluZGV4IHBvaW50IChiKSAgICAgICAkeHgKCiAgIFRoZW4gZm9yIGV2ZXJ5IGluZGV4IHBvaW50IHRoZSBmb2xsb3dpbmcgZGF0YSBpcyBpbmNsdWRlZDsKCiAgICAgRnJhY3Rpb24gYXQgaW5kZXggKEZpKSAgICAgICAgICAkeHggKHh4KQoKICAgJ0luZGV4ZWQgZGF0YSBzdGFydCcgaXMgYSBieXRlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCiAgICdJbmRleGVkIGRhdGEgbGVuZ3RoJyBpcyB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIGF1ZGlvIGRhdGEgYmVpbmcKICAgaW5kZXhlZC4gJ051bWJlciBvZiBpbmRleCBwb2ludHMnIGlzIHRoZSBudW1iZXIgb2YgaW5kZXggcG9pbnRzLCBhcwogICB0aGUgbmFtZSBpbXBsaWVzLiBUaGUgcmVjb21tZW5kZWQgbnVtYmVyIGlzIDEwMC4gJ0JpdHMgcGVyIGluZGV4CiAgIHBvaW50JyBpcyA4IG9yIDE2LCBkZXBlbmRpbmcgb24gdGhlIGNob3NlbiBwcmVjaXNpb24uIDggYml0cyB3b3JrcwogICB3ZWxsIGZvciBzaG9ydCBmaWxlcyAobGVzcyB0aGFuIDUgbWludXRlcyBvZiBhdWRpbyksIHdoaWxlIDE2IGJpdHMgaXMKICAgYWR2YW50YWdlb3VzIGZvciBsb25nIGZpbGVzLiAnRnJhY3Rpb24gYXQgaW5kZXgnIGlzIHRoZSBudW1lcmF0b3Igb2YKICAgdGhlIGZyYWN0aW9uIHJlcHJlc2VudGluZyBhIHJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBkYXRhLiBUaGUKICAgZGVub21pbmF0b3IgaXMgMiB0byB0aGUgcG93ZXIgb2YgYi4KCiAgIEhlcmUgYXJlIHRoZSBhbGdvcml0aG1zIHRvIGJlIHVzZWQgaW4gdGhlIGNhbGN1bGF0aW9uLiBUaGUga25vd24gZGF0YQogICBtdXN0IGJlIHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBpbmRleGVkIGRhdGEgKFMpLCB0aGUgb2Zmc2V0CiAgIG9mIHRoZSBlbmQgb2YgdGhlIGluZGV4ZWQgZGF0YSAoRSksIHRoZSBudW1iZXIgb2YgaW5kZXggcG9pbnRzIChOKSwKICAgdGhlIG9mZnNldCBhdCBpbmRleCBpIChPaSkuIFdlIGNhbGN1bGF0ZSB0aGUgZnJhY3Rpb24gYXQgaW5kZXggaQogICAoRmkpLgoKICAgT2kgaXMgdGhlIG9mZnNldCBvZiB0aGUgZnJhbWUgd2hvc2Ugc3RhcnQgaXMgc29vbmVzdCBhZnRlciB0aGUgcG9pbnQKICAgZm9yIHdoaWNoIHRoZSB0aW1lIG9mZnNldCBpcyAoaS9OICogZHVyYXRpb24pLgoKICAgVGhlIGZyYW1lIGRhdGEgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXMgZm9sbG93czoKCiAgICAgRmkgPSBPaS9MICogMl5iICAgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikKCiAgIE9mZnNldCBjYWxjdWxhdGlvbiBzaG91bGQgYmUgY2FsY3VsYXRlZCBhcyBmb2xsb3dzIGZyb20gZGF0YSBpbiB0aGUKICAgZnJhbWU6CgogICAgIE9pID0gKEZpLzJeYikqTCAgICAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKQoKCjUuICBDb3B5cmlnaHQKCiAgIENvcHlyaWdodCAoQykgTWFydGluIE5pbHNzb24gMjAwMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCiAgIFRoaXMgZG9jdW1lbnQgYW5kIHRyYW5zbGF0aW9ucyBvZiBpdCBtYXkgYmUgY29waWVkIGFuZCBmdXJuaXNoZWQgdG8KICAgb3RoZXJzLCBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IGNvbW1lbnQgb24gb3Igb3RoZXJ3aXNlIGV4cGxhaW4gaXQKICAgb3IgYXNzaXN0IGluIGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgcHJlcGFyZWQsIGNvcGllZCwgcHVibGlzaGVkCiAgIGFuZCBkaXN0cmlidXRlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCByZXN0cmljdGlvbiBvZiBhbnkKICAga2luZCwgcHJvdmlkZWQgdGhhdCBhIHJlZmVyZW5jZSB0byB0aGlzIGRvY3VtZW50IGlzIGluY2x1ZGVkIG9uIGFsbAogICBzdWNoIGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3Jrcy4gSG93ZXZlciwgdGhpcyBkb2N1bWVudCBpdHNlbGYgbWF5CiAgIG5vdCBiZSBtb2RpZmllZCBpbiBhbnkgd2F5IGFuZCByZWlzc3VlZCBhcyB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuCgogICBUaGUgbGltaXRlZCBwZXJtaXNzaW9ucyBncmFudGVkIGFib3ZlIGFyZSBwZXJwZXR1YWwgYW5kIHdpbGwgbm90IGJlCiAgIHJldm9rZWQuCgogICBUaGlzIGRvY3VtZW50IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBwcm92aWRlZCBvbiBhbgogICAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgQVVUSE9SUyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFIE9GCiAgIFRIRSBJTkZPUk1BVElPTiBIRVJFSU4gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFJJR0hUUyBPUiBBTlkgSU1QTElFRAogICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KCgo2LiAgIFJlZmVyZW5jZXMKCiAgIFtDRERCXSBDb21wYWN0IERpc2MgRGF0YSBCYXNlCgogICAgICA8dXJsOmh0dHA6Ly93d3cuY2RkYi5jb20+CgogICBbSUQzdjIuMy4wXSBNYXJ0aW4gTmlsc3NvbiwgIklEM3YyIGluZm9ybWFsIHN0YW5kYXJkIi4KCiAgICAgIDx1cmw6aHR0cDovL3d3dy5pZDMub3JnL2lkM3YyLjMuMC50eHQ+CgogICBbSUQzdjItc3RyY3RdIE1hcnRpbiBOaWxzc29uLAogICAiSUQzIHRhZyB2ZXJzaW9uIDIuNC4wIC0gTWFpbiBTdHJ1Y3R1cmUiCiAgIAogICAgICA8dXJsOmh0dHAvL3d3dy5pZDMub3JnL2lkM3YyLjQuMC1zdHJ1Y3R1cmUudHh0PgoKICAgW0lTTy02MzktMl0gSVNPL0ZESVMgNjM5LTIuCiAgIENvZGVzIGZvciB0aGUgcmVwcmVzZW50YXRpb24gb2YgbmFtZXMgb2YgbGFuZ3VhZ2VzLCBQYXJ0IDI6IEFscGhhLTMKICAgY29kZS4gVGVjaG5pY2FsIGNvbW1pdHRlZSAvIHN1YmNvbW1pdHRlZTogVEMgMzcgLyBTQyAyCgogICBbSVNPLTQyMTddIElTTyA0MjE3OjE5OTUuCiAgIENvZGVzIGZvciB0aGUgcmVwcmVzZW50YXRpb24gb2YgY3VycmVuY2llcyBhbmQgZnVuZHMuCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IFRDIDY4CgogICBbSVNPLTg4NTktMV0gSVNPL0lFQyBESVMgODg1OS0xLgogICA4LWJpdCBzaW5nbGUtYnl0ZSBjb2RlZCBncmFwaGljIGNoYXJhY3RlciBzZXRzLCBQYXJ0IDE6IExhdGluCiAgIGFscGhhYmV0IE5vLiAxLiBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBKVEMgMSAvIFNDIDIKCiAgIFtJU1JDXSBJU08gMzkwMToxOTg2CiAgIEludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgKElTUkMpLgogICBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBUQyA0NiAvIFNDIDkKCiAgIFtKRklGXSBKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9ybWF0LCB2ZXJzaW9uIDEuMDIKCiAgICAgIDx1cmw6aHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvSlBFRy9qZmlmLnR4dD4KCiAgIFtLRVlXT1JEU10gUy4gQnJhZG5lciwgJ0tleSB3b3JkcyBmb3IgdXNlIGluIFJGQ3MgdG8gSW5kaWNhdGUKICAgUmVxdWlyZW1lbnQgTGV2ZWxzJywgUkZDIDIxMTksIE1hcmNoIDE5OTcuCgogICAgICA8dXJsOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIxMTkudHh0PgoKICAgW01JTUVdIEZyZWVkLCBOLiAgYW5kIE4uIEJvcmVuc3RlaW4sICAiTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwKICAgRXh0ZW5zaW9ucyAoTUlNRSkgUGFydCBPbmU6IEZvcm1hdCBvZiBJbnRlcm5ldCBNZXNzYWdlIEJvZGllcyIsCiAgIFJGQyAyMDQ1LCBOb3ZlbWJlciAxOTk2LgoKICAgICAgPHVybDpmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMDQ1LnR4dD4KCiAgIFtNUEVHXSBJU08vSUVDIDExMTcyLTM6MTk5My4KICAgQ29kaW5nIG9mIG1vdmluZyBwaWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBhdWRpbyBmb3IgZGlnaXRhbCBzdG9yYWdlCiAgIG1lZGlhIGF0IHVwIHRvIGFib3V0IDEsNSBNYml0L3MsIFBhcnQgMzogQXVkaW8uCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IEpUQyAxIC8gU0MgMjkKICAgIGFuZAogICBJU08vSUVDIDEzODE4LTM6MTk5NQogICBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQgYXVkaW8gaW5mb3JtYXRpb24sCiAgIFBhcnQgMzogQXVkaW8uCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IEpUQyAxIC8gU0MgMjkKICAgIGFuZAogICBJU08vSUVDIERJUyAxMzgxOC0zCiAgIEdlbmVyaWMgY29kaW5nIG9mIG1vdmluZyBwaWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBhdWRpbyBpbmZvcm1hdGlvbiwKICAgUGFydCAzOiBBdWRpbyAoUmV2aXNpb24gb2YgSVNPL0lFQyAxMzgxOC0zOjE5OTUpCgoKICAgW1BOR10gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcywgdmVyc2lvbiAxLjAKCiAgICAgIDx1cmw6aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXBuZy1tdWx0aS5odG1sPgoKICAgW1VSTF0gVC4gQmVybmVycy1MZWUsIEwuIE1hc2ludGVyICYgTS4gTWNDYWhpbGwsICJVbmlmb3JtIFJlc291cmNlCiAgIExvY2F0b3JzIChVUkwpLiIsIFJGQyAxNzM4LCBEZWNlbWJlciAxOTk0LgoKICAgICAgPHVybDpmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNzM4LnR4dD4KCiAgIFtaTElCXSBQLiBEZXV0c2NoLCBBbGFkZGluIEVudGVycHJpc2VzICYgSi1MLiBHYWlsbHksICJaTElCCiAgIENvbXByZXNzZWQKICAgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDMuMyIsIFJGQyAxOTUwLCBNYXkgMTk5Ni4KCiAgICAgIDx1cmw6ZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTk1MC50eHQ+CgoKNy4gICBBcHBlbmRpeAoKCkEuICAgQXBwZW5kaXggQSAtIEdlbnJlIExpc3QgZnJvbSBJRDN2MQoKICAgVGhlIGZvbGxvd2luZyBnZW5yZXMgaXMgZGVmaW5lZCBpbiBJRDN2MQoKICAgICAgMC5CbHVlcwogICAgICAxLkNsYXNzaWMgUm9jawogICAgICAyLkNvdW50cnkKICAgICAgMy5EYW5jZQogICAgICA0LkRpc2NvCiAgICAgIDUuRnVuawogICAgICA2LkdydW5nZQogICAgICA3LkhpcC1Ib3AKICAgICAgOC5KYXp6CiAgICAgIDkuTWV0YWwKICAgICAxMC5OZXcgQWdlCiAgICAgMTEuT2xkaWVzCiAgICAgMTIuT3RoZXIKICAgICAxMy5Qb3AKICAgICAxNC5SJkIKICAgICAxNS5SYXAKICAgICAxNi5SZWdnYWUKICAgICAxNy5Sb2NrCiAgICAgMTguVGVjaG5vCiAgICAgMTkuSW5kdXN0cmlhbAogICAgIDIwLkFsdGVybmF0aXZlCiAgICAgMjEuU2thCiAgICAgMjIuRGVhdGggTWV0YWwKICAgICAyMy5QcmFua3MKICAgICAyNC5Tb3VuZHRyYWNrCiAgICAgMjUuRXVyby1UZWNobm8KICAgICAyNi5BbWJpZW50CiAgICAgMjcuVHJpcC1Ib3AKICAgICAyOC5Wb2NhbAogICAgIDI5LkphenorRnVuawogICAgIDMwLkZ1c2lvbgogICAgIDMxLlRyYW5jZQogICAgIDMyLkNsYXNzaWNhbAogICAgIDMzLkluc3RydW1lbnRhbAogICAgIDM0LkFjaWQKICAgICAzNS5Ib3VzZQogICAgIDM2LkdhbWUKICAgICAzNy5Tb3VuZCBDbGlwCiAgICAgMzguR29zcGVsCiAgICAgMzkuTm9pc2UKICAgICA0MC5BbHRlcm5Sb2NrCiAgICAgNDEuQmFzcwogICAgIDQyLlNvdWwKICAgICA0My5QdW5rCiAgICAgNDQuU3BhY2UKICAgICA0NS5NZWRpdGF0aXZlCiAgICAgNDYuSW5zdHJ1bWVudGFsIFBvcAogICAgIDQ3Lkluc3RydW1lbnRhbCBSb2NrCiAgICAgNDguRXRobmljCiAgICAgNDkuR290aGljCiAgICAgNTAuRGFya3dhdmUKICAgICA1MS5UZWNobm8tSW5kdXN0cmlhbAogICAgIDUyLkVsZWN0cm9uaWMKICAgICA1My5Qb3AtRm9sawogICAgIDU0LkV1cm9kYW5jZQogICAgIDU1LkRyZWFtCiAgICAgNTYuU291dGhlcm4gUm9jawogICAgIDU3LkNvbWVkeQogICAgIDU4LkN1bHQKICAgICA1OS5HYW5nc3RhCiAgICAgNjAuVG9wIDQwCiAgICAgNjEuQ2hyaXN0aWFuIFJhcAogICAgIDYyLlBvcC9GdW5rCiAgICAgNjMuSnVuZ2xlCiAgICAgNjQuTmF0aXZlIEFtZXJpY2FuCiAgICAgNjUuQ2FiYXJldAogICAgIDY2Lk5ldyBXYXZlCiAgICAgNjcuUHN5Y2hhZGVsaWMKICAgICA2OC5SYXZlCiAgICAgNjkuU2hvd3R1bmVzCiAgICAgNzAuVHJhaWxlcgogICAgIDcxLkxvLUZpCiAgICAgNzIuVHJpYmFsCiAgICAgNzMuQWNpZCBQdW5rCiAgICAgNzQuQWNpZCBKYXp6CiAgICAgNzUuUG9sa2EKICAgICA3Ni5SZXRybwogICAgIDc3Lk11c2ljYWwKICAgICA3OC5Sb2NrICYgUm9sbAogICAgIDc5LkhhcmQgUm9jawoKCjguICAgQXV0aG9yJ3MgQWRkcmVzcwoKICAgV3JpdHRlbiBieQoKICAgICBNYXJ0aW4gTmlsc3NvbgogICAgIFJ5ZHN25GdlbiAyNDYgQy4gMzAKICAgICBTRS01ODQgMzQgTGlua/ZwaW5nCiAgICAgU3dlZGVuCgogICAgIEVtYWlsOiBuaWxzc29uQGlkMy5vcmcK