KmZhcnNpLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMCBBdWcgMDcKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgTW9ydGF6YSBHaGFzc2FiIFNoaXJhbgoKClJpZ2h0IHRvIExlZnQgYW5kIEZhcnNpIE1hcHBpbmcgZm9yIFZpbQkJKmZhcnNpKiAqRmFyc2kqCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgY29tbWFuZHN9CgoJCQkJCQkqRTI3KgpJbiBvcmRlciB0byB1c2UgcmlnaHQtdG8tbGVmdCBhbmQgRmFyc2kgbWFwcGluZyBzdXBwb3J0LCBpdCBpcyBuZWNlc3NhcnkgdG8KY29tcGlsZSBWaW0gd2l0aCB0aGUgfCtmYXJzaXwgZmVhdHVyZS4KClRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbWFkZSBieSBNb3J0YXphIEcuIFNoaXJhbiA8c2hpcmFuQGpwcy5uZXQ+CgoKSW50cm9kdWN0aW9uCi0tLS0tLS0tLS0tLQpJbiByaWdodC10by1sZWZ0IG9yaWVudGVkIGZpbGVzIHRoZSBjaGFyYWN0ZXJzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGZyb20gcmlnaHQKdG8gbGVmdC4gIFRoaXMga2luZCBvZiBmaWxlIGlzIG1vc3QgdXNlZnVsIHdoZW4gd3JpdGluZyBGYXJzaSBkb2N1bWVudHMsCmNvbXBvc2luZyBmYXhlcyBvciB3cml0aW5nIEZhcnNpIG1lbW9zLgoKVGhlIGNvbW1hbmRzLCBwcm9tcHRzIGFuZCBoZWxwIGZpbGVzIGFyZSBub3QgaW4gRmFyc2ksIHRoZXJlZm9yZSB0aGUgdXNlcgppbnRlcmZhY2UgcmVtYWlucyB0aGUgc3RhbmRhcmQgVmkgaW50ZXJmYWNlLgoKCkhpZ2hsaWdodHMKLS0tLS0tLS0tLQpvICBFZGl0aW5nIGxlZnQtdG8tcmlnaHQgZmlsZXMgYXMgaW4gdGhlIG9yaWdpbmFsIFZpbSwgbm8gY2hhbmdlLgoKbyAgVmlld2luZyBhbmQgZWRpdGluZyBmaWxlcyBpbiByaWdodC10by1sZWZ0IHdpbmRvd3MuICAgRmlsZSBvcmllbnRhdGlvbiBpcwogICBwZXIgd2luZG93LCBzbyBpdCBpcyBwb3NzaWJsZSB0byB2aWV3IHRoZSBzYW1lIGZpbGUgaW4gcmlnaHQtdG8tbGVmdCBhbmQKICAgbGVmdC10by1yaWdodCBtb2Rlcywgc2ltdWx0YW5lb3VzbHkuCgpvICBDb21wYXRpYmlsaXR5IHRvIHRoZSBvcmlnaW5hbCBWaW0uICAgQWxtb3N0IGFsbCBmZWF0dXJlcyB3b3JrIGluCiAgIHJpZ2h0LXRvLWxlZnQgbW9kZSAoc2VlIGJ1Z3MgYmVsb3cpLgoKbyAgQ2hhbmdpbmcga2V5Ym9hcmQgbWFwcGluZyBhbmQgcmV2ZXJzZSBpbnNlcnQgbW9kZXMgdXNpbmcgYSBzaW5nbGUKICAgY29tbWFuZC4KCm8gIEJhY2tpbmcgZnJvbSByZXZlcnNlIGluc2VydCBtb2RlIHRvIHRoZSBjb3JyZWN0IHBsYWNlIGluIHRoZSBmaWxlCiAgIChpZiBwb3NzaWJsZSkuCgpvICBXaGlsZSBpbiBGYXJzaSBtb2RlLCBudW1iZXJzIGFyZSBlbnRlcmVkIGZyb20gbGVmdCB0byByaWdodC4gIFVwb24gZW50ZXJpbmcKICAgYSBub25lIG51bWJlciBjaGFyYWN0ZXIsIHRoYXQgY2hhcmFjdGVyIHdpbGwgYmUgaW5zZXJ0ZWQganVzdCBpbnRvIHRoZQogICBsZWZ0IG9mIHRoZSBsYXN0IG51bWJlci4KCm8gIE5vIHNwZWNpYWwgdGVybWluYWwgd2l0aCByaWdodC10by1sZWZ0IGNhcGFiaWxpdGllcyBpcyByZXF1aXJlZC4gIFRoZQogICByaWdodC10by1sZWZ0IGNoYW5nZXMgYXJlIGNvbXBsZXRlbHkgaGFyZHdhcmUgaW5kZXBlbmRlbnQuICBPbmx5CiAgIEZhcnNpIGZvbnQgaXMgbmVjZXNzYXJ5LgoKbyAgRmFyc2kga2V5bWFwcGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGluIHJldmVyc2UgaW5zZXJ0IG1vZGUuCgpvICBUb2dnbGluZyBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQgdmlhIEY4IGZ1bmN0aW9uIGtleS4KCm8gIFRvZ2dsaW5nIGJldHdlZW4gRmFyc2kgSVNJUi0zMzQyIHN0YW5kYXJkIGVuY29kaW5nIGFuZCBWaW0gRmFyc2kgdmlhIEY5CiAgIGZ1bmN0aW9uIGtleS4gIFNpbmNlIHRoaXMgbWFrZXMgc2Vuc2Ugb25seSBmb3IgdGhlIHRleHQgd3JpdHRlbiBpbgogICByaWdodC10by1sZWZ0IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyBzdXBwb3J0ZWQgb25seSBpbiByaWdodC10by1sZWZ0CiAgIG1vZGUuCgpGYXJzaSBGb250cwkJCQkJKmZhcnNpIGZvbnRzKgotLS0tLS0tLS0tLQoKVGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSAnJFZJTS9mYXJzaS9mb250cycKZGlyZWN0b3J5OgoKICAgKyAgZmFyLWEwMS5wY2YgICAgWCBXaW5kb3dzIGZvbnRzIGZvciBVbml4IGluY2x1ZGluZyBMaW51eCBzeXN0ZW1zCiAgICsgIGZhci1hMDEuYmYgICAgIFggV2luZG93cyBmb250cyBmb3IgU3VuT1MKICAgKyAgZmFyLWEwMS5mMTYgICAgYSBzY3JlZW4gZm9udHMgZm9yIFVuaXggaW5jbHVkaW5nIExpbnV4IHN5c3RlbXMKICAgKyAgZmFyLWEwMS5mb24gICAgYSBtb25vc3BhY2VkIGZvbnRzIGZvciBXaW5kb3dzIE5ULzk1Lzk4CiAgICsgIGZhci1hMDEuY29tICAgIGEgc2NyZWVuIGZvbnRzIGZvciBET1MKCgpGb250IEluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tLS0tLQoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBNUyBXaW5kb3cgc3lzdGVtcyAoTlQvOTUvOTgpCgogICBGcm9tICdDb250cm9sIFBhbmVsJyBmb2xkZXIsIHN0YXJ0IHRoZSAnRm9udHMnIHByb2dyYW0uICBUaGVuIGZyb20gJ2ZpbGUnCiAgIG1lbnUgaXRlbSBzZWxlY3QgJ0luc3RhbGwgTmV3IEZvbnRzIC4uLicuICBCcm93c2UgYW5kIHNlbGVjdCB0aGUKICAgJ2Zhci1hMDEuZm9uJywgdGhlbiBmb2xsb3cgdGhlIGluc3RhbGxhdGlvbiBndWlkZS4KICAgTk9URTogc2V2ZXJhbCBwZW9wbGUgaGF2ZSByZXBvcnRlZCB0aGF0IHRoaXMgZG9lcyBub3Qgd29yay4gIFRoZSBzb2x1dGlvbgogICBpcyB1bmtub3duLgoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChVbml4L0xpbnV4KQoKICAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLCBjb3B5IGZhci1hMDEucGNmLlogb3IgZmFyLWEwMS5wY2YuZ3ogaW50byBhCiAgIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEZhcnNpCiAgIGZvbnRzIGFuZCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CgogICA+ICBta2ZvbnRkaXIKICAgPiAgeHNldCArZnAgcGF0aF9uYW1lX29mX2ZhcnNpX2ZvbnRzX2RpcmVjdG9yeQoKbyAgSW5zdGFsbGF0aW9uIG9mIGZvbnRzIGZvciBYIFdpbmRvdyBzeXN0ZW1zIChTdW5PUykKCiAgIENvcHkgZmFyLWEwMS5iZiBmb250IGludG8gYSBkaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UuCiAgIENoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZhci1hMDEuZmIgZm9udHMgYW5kCiAgIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKCiAgID4gIGZsZGZhbWlseQogICA+ICB4c2V0ICtmcCBwYXRoX25hbWVfb2ZfZm9udHNfZGlyZWN0b3J5CgpvICBJbnN0YWxsYXRpb24gb2YgQVNDSUkgc2NyZWVuIGZvbnRzIChVbml4L0xpbnV4KQoKICAgRm9yIExpbnV4IHN5c3RlbSwgY29weSB0aGUgZmFyLWEwMS5mMTYgZm9udHMgaW50byAvdXNyL2xpYi9rYmQvY29uc29sZWZvbnRzCiAgIGRpcmVjdG9yeSBhbmQgZXhlY3V0ZSB0aGUgc2V0Zm9udCBwcm9ncmFtIGFzICJzZXRmb250IGZhci1hMDEuZjE2Ii4gIEZvcgogICBvdGhlciBzeXN0ZW1zIChlLmcuIFNDTyBVbml4KSwgcGxlYXNlIHJlZmVyIHRvIHRoZSBmb250cyBpbnN0YWxsYXRpb24KICAgc2VjdGlvbiBvZiB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiBtYW51YWxzLgoKbyAgSW5zdGFsbGF0aW9uIG9mIEFTQ0lJIHNjcmVlbiBmb250cyAoRE9TKQoKICAgQWZ0ZXIgc3lzdGVtIHBvd2VyIG9uLCBwcmlvciB0byB0aGUgZmlyc3QgdXNlIG9mIFZpbSwgdXBsb2FkIHRoZSBGYXJzaQogICBmb250cyBieSBleGVjdXRpbmcgdGhlIGZhci1hMDEuY29tIGZvbnQgdXBsb2FkaW5nIHByb2dyYW0uCgoKVXNhZ2UKLS0tLS0KUHJpb3IgdG8gc3RhcnRpbmcgVmltLCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggVmltIGNhbiBydW4gaW4gRmFyc2kgbW9kZSwKbXVzdCBiZSBzZXQuICBJbiBhZGRpdGlvbiB0byBpbnN0YWxsYXRpb24gb2YgRmFyc2kgZm9udHMsIGZvbGxvd2luZyBwb2ludHMKcmVmZXIgdG8gc29tZSBvZiB0aGUgc3lzdGVtIGVudmlyb25tZW50cywgd2hpY2ggeW91IG1heSBuZWVkIHRvIHNldDoKS2V5IGNvZGUgbWFwcGluZywgbG9hZGluZyBncmFwaGljIGNhcmQgaW4gQVNDSUkgc2NyZWVuIG1vZGUsIHNldHRpbmcgdGhlIElPCmRyaXZlciBpbiA4IGJpdCBjbGVhbiBtb2RlIC4uLiAuCgpvICBTZXR0aW5nIHRoZSBGYXJzaSBmb250cwoKICAgKyAgRm9yIFZpbSBHVUkgc2V0IHRoZSAnZ3VpZm9udCcgdG8gZmFyLWEwMS4gIFRoaXMgaXMgZG9uZSBieSBlbnRlcmluZwogICAgICAnOnNldCBndWlmb250PWZhci1hMDEnIGluIHRoZSBWaW0gd2luZG93LgoKICAgICAgWW91IGNhbiBoYXZlICdndWlmb250JyBzZXQgdG8gZmFyLWEwMSBieSBWaW0gZHVyaW5nIHRoZSBWaW0gc3RhcnR1cAogICAgICBieSBhcHBlbmRpbmcgdGhlICc6c2V0IGd1aWZvbnQ9ZmFyLWEwMScgaW50byB5b3VyIC52aW1yYyBmaWxlCiAgICAgIChpbiBjYXNlIG9mIE5ULzk1Lzk4IHBsYXRmb3JtcyBfdmltcmMpLgoKICAgICAgVW5kZXIgdGhlIFggV2luZG93IGVudmlyb25tZW50LCB5b3UgY2FuIGFsc28gc3RhcnQgVmltIHdpdGggdGhlCiAgICAgICctZm4gZmFyLWEwMScgb3B0aW9uLgoKICAgKyAgRm9yIFZpbSB3aXRoaW4gYSB4dGVybSwgc3RhcnQgYSB4dGVybSB3aXRoIHRoZSBGYXJzaSBmb250cyAoZS5nLgogICAgICBrdGVybSAtZm4gZmFyLWEwMSkuICBUaGVuIHN0YXJ0IFZpbSBpbnNpZGUgdGhlIGt0ZXJtLgoKICAgKyAgRm9yIFZpbSB1bmRlciBET1MsIHByaW9yIHRvIHRoZSBmaXJzdCB1c2FnZSBvZiBWaW0sIHVwbG9hZCB0aGUgRmFyc2kKICAgICAgZm9udHMgYnkgZXhlY3V0aW5nIHRoZSBmYXItYTAxLmNvbSBmb250cyB1cGxvYWRpbmcgcHJvZ3JhbS4KCm8gIEZhcnNpIEtleW1hcHBpbmcgQWN0aXZhdGlvbgoKICAgVG8gYWN0aXZhdGUgdGhlIEZhcnNpIGtleW1hcHBpbmcsIHNldCBlaXRoZXIgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJy4KICAgVGhpcyBpcyBkb25lIGJ5IGVudGVyaW5nICc6c2V0IGFrbScgb3IgJzpzZXQgZmsnIGluIHRoZSBWaW0gd2luZG93LgogICBZb3UgY2FuIGhhdmUgJ2FsdGtleW1hcCcgb3IgJ2ZrbWFwJyBzZXQgYXMgZGVmYXVsdCBieSBhcHBlbmRpbmcgJzpzZXQgYWttJwogICBvciAnOnNldCBmaycgaW4geW91ciAudmltcmMgZmlsZSBvciBfdmltcmMgaW4gY2FzZSBvZiBOVC85NS85OCBwbGF0Zm9ybXMuCgogICBUbyB0dXJuIG9mZiB0aGUgRmFyc2kga2V5bWFwcGluZyBhcyBhIGRlZmF1bHQgc2Vjb25kIGxhbmd1YWdlIGtleW1hcHBpbmcsCiAgIHJlc2V0IHRoZSAnYWx0a2V5bWFwJyBieSBlbnRlcmluZyAnOnNldCBub2FrbScuCgpvICByaWdodC10by1sZWZ0IEZhcnNpIE1vZGUKCiAgIEJ5IGRlZmF1bHQgVmltIHN0YXJ0cyBpbiBMZWZ0LXRvLXJpZ2h0IG1vZGUuICBGb2xsb3dpbmcgYXJlIHdheXMgdG8gY2hhbmdlCiAgIHRoZSB3aW5kb3cgb3JpZW50YXRpb246CgogICArIFN0YXJ0IFZpbSB3aXRoIHRoZSAtRiBvcHRpb24gKGUuZy4gdmltIC1GIC4uLikuCgogICArIFVzZSB0aGUgRjggZnVuY3Rpb24ga2V5IHRvIHRvZ2dsZSBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCgogICArIFdoaWxlIGluIExlZnQtdG8tcmlnaHQgbW9kZSwgZW50ZXIgJ3NldCBybCcgaW4gdGhlIGNvbW1hbmQgbGluZSAoJ3JsJyBpcwogICAgIHRoZSBhYmJyZXZpYXRpb24gZm9yIHJpZ2h0bGVmdCkuCgogICArIFB1dCB0aGUgJ3NldCBybCcgbGluZSBpbiB5b3VyICcudmltcmMnIGZpbGUgdG8gc3RhcnQgVmltIGluCiAgICAgcmlnaHQtdG8tbGVmdCBtb2RlIHBlcm1hbmVudGx5LgoKRW5jb2RpbmcKLS0tLS0tLS0KClRoZSBsZXR0ZXIgZW5jb2RpbmcgdXNlZCBpcyB0aGUgVmltIGV4dGVuZGVkIElTSVItMzM0MiBzdGFuZGFyZCB3aXRoIGEgYnVpbHQKaW4gZnVuY3Rpb24gdG8gY29udmVydCBiZXR3ZWVuIFZpbSBleHRlbmRlZCBJU0lSLTMzNDIgYW5kIElTSVItMzM0MiBzdGFuZGFyZC4KCkZvciBkb2N1bWVudCBwb3J0YWJpbGl0eSByZWFzb25zLCB0aGUgbGV0dGVyIGVuY29kaW5nIGlzIGtlcHQgdGhlIHNhbWUgYWNyb3NzCmRpZmZlcmVudCBwbGF0Zm9ybXMgKGkuZS4gVU5JWCdzLCBOVC85NS85OCwgTVMgRE9TLCAuLi4pLgoKCm8gIEtleWJvYXJkCgogICArICBDVFJMLV8gaW4gaW5zZXJ0L3JlcGxhY2UgbW9kZXMgdG9nZ2xlcyBiZXR3ZWVuIEZhcnNpKGFrbSkvTGF0aW4KICAgICAgbW9kZSBhcyBmb2xsb3dzOgoKICAgKyAgQ1RSTC1fIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWQgdGV4dCBpbiBlZGl0IG1vZGUuCgogICArICBDVFJMLV8gaW4gY29tbWFuZCBtb2RlIG9ubHkgdG9nZ2xlcyBrZXlib2FyZCBtYXBwaW5nIGJldHdlZW4gRmFyc2koYWttKS8KICAgICAgTGF0aW4uICBUaGUgRmFyc2kgdGV4dCBpcyB0aGVuIGVudGVyZWQgaW4gcmV2ZXJzZSBpbnNlcnQgbW9kZS4KCiAgICsgIEY4IC0gVG9nZ2xlcyBiZXR3ZWVuIGxlZnQtdG8tcmlnaHQgYW5kIHJpZ2h0LXRvLWxlZnQuCgogICArICBGOSAtIFRvZ2dsZXMgdGhlIGVuY29kaW5nIGJldHdlZW4gSVNJUi0zMzQyIHN0YW5kYXJkIGFuZCBWaW0gZXh0ZW5kZWQKICAgICAgSVNJUi0zMzQyIChzdXBwb3J0ZWQgb25seSBpbiByaWdodC10by1sZWZ0IG1vZGUpLgoKICAgKyAgS2V5Ym9hcmQgbWFwcGluZyBpcyBiYXNlZCBvbiB0aGUgSXJhbmlhbiBJU0lSSS0yOTAxIHN0YW5kYXJkLgogICAgICBGb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGtleWJvYXJkIG1hcHBpbmcgd2hpbGUgRmFyc2koYWttKSBtb2RlIHNldDoKCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglgICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5ICAwICAtICA9CgmiICCxICCyICCzICC0ICC1ICC2ICC3ICC4ICC5ICCwICCtICC9CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgl+ICAhICBAICAjICAkICAlICBeICAmICAqICAoICApICBfICArCgl+ICCjICCnICCuICCkICClICCqICCsICDoICCoICCpICDpICCrCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglxICB3ICBlICByICB0ICB6ICB1ICBpICBvICBwICBbICBdCgnTICDSICDGICDZICDYICDVICDWICDgICDKICDJICDHICCICgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglRICBXICBFICBSICBUICBaICBVICBJICBPICBQICB7ICB9Cgn3ICD1ICD0ICDzICDyICD9ICDwICD2ICBbICBdICB7ICB9CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglhICBzICBkICBmICBnICBoICBqICBrICBsICA7ICAnICBcCgnRICDQICDhICDDICDcICDBICDFICDeICDdICDaICDbICDrCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglBICBTICBEICBGICBHICBIICBKICBLICBMICA6ICAiICB8Cgn5ICD7oCD+ICD6ICD4ICDAICD8ICDmICDnICC6ICC7ICDqCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgk8ICB5ICB4ICBjICB2ICBiICBuICBtICAsICAuICAvCgm+ICDXICDUICDOICDNICDMICDLICDEICDfICCmICCvCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgk+ICBZICBYICBDICBWICBCICBOICBNICA8ICA+ICA/Cgm8ICDxICDUICDPICDNICChICDLICDCICC+ICC8ICC/CgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpOb3RlOgoJoSAgc3RhbmRzIGZvciBGYXJzaSBQU1AgKGJyZWFrIHdpdGhvdXQgc3BhY2UpCgoJoiAgc3RhbmRzIGZvciBGYXJzaSBQQ04gKGZvciBIQU1aRSBhdHRyaWJ1dGUgKQoKUmVzdHJpY3Rpb25zCi0tLS0tLS0tLS0tLQoKbyAgSW4gaW5zZXJ0L3JlcGxhY2UgbW9kZSBhbmQgZmttYXAgKEZhcnNpIG1vZGUpIHNldCwgQ1RSTC1CIGlzIG5vdAogICBzdXBwb3J0ZWQuCgpvICBJZiB5b3UgY2hhbmdlIHRoZSBjaGFyYWN0ZXIgbWFwcGluZyBiZXR3ZWVuIExhdGluL0ZhcnNpLCB0aGUgcmVkbyBidWZmZXIKICAgd2lsbCBiZSByZXNldCAoZW1wdGllZCkuICBUaGF0IGlzLCByZWRvIGlzIHZhbGlkIGFuZCB3aWxsIGZ1bmN0aW9uICh1c2luZwogICAnLicpIG9ubHkgd2l0aGluIHRoZSBtb2RlIHlvdSBhcmUgaW4uCgpvICBXaGlsZSBudW1iZXJzIGFyZSBlbnRlcmVkIGluIEZhcnNpIG1vZGUsIHRoZSByZWRvIGJ1ZmZlciB3aWxsIGJlIHJlc2V0CiAgIChlbXB0aWVkKS4gIFRoYXQgaXMsIHlvdSBjYW5ub3QgcmVkbyB0aGUgbGFzdCBjaGFuZ2VzICh1c2luZyAnLicpIGFmdGVyCiAgIGVudGVyaW5nIG51bWJlcnMuCgpvICBXaGlsZSBpbiBsZWZ0LXRvLXJpZ2h0IG1vZGUgYW5kIEZhcnNpIG1vZGUgc2V0LCBDVFJMLVIgaXMgbm90IHN1cHBvcnRlZC4KCm8gIFdoaWxlIGluIHJpZ2h0LXRvLWxlZnQgbW9kZSwgdGhlIHNlYXJjaCBvbiAnTGF0aW4nIHBhdHRlcm4gZG9lcyBub3Qgd29yaywKICAgZXhjZXB0IGlmIHlvdSBlbnRlciB0aGUgTGF0aW4gc2VhcmNoIHBhdHRlcm4gaW4gcmV2ZXJzZS4KCm8gIEluIGNvbW1hbmQgbW9kZSB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBlbnRlcmluZyBudW1iZXJzIGZyb20gbGVmdAogICB0byByaWdodCBhbmQgYWxzbyBmb3IgdGhlIHNha2Ugb2YgZmxleGliaWxpdHkgdGhlIGtleW1hcHBpbmcgbG9naWMgaXMKICAgcmVzdHJpY3RlZC4KCm8gIFVuZGVyIHRoZSBYIFdpbmRvdyBlbnZpcm9ubWVudCwgaWYgeW91IHdhbnQgdG8gcnVuIFZpbSB3aXRoaW4gYSB4dGVybQogICB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgRmFyc2kgbW9kZSBzZXQsIHlvdSBuZWVkIHRvIGhhdmUgYW4gQU5TSSBjb21wYXRpYmxlCiAgIHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBsZXR0ZXIgY29kZXMgYWJvdmUgMTI4IGRlY2ltYWwKICAgaGF2ZSBjZXJ0YWluIG1lYW5pbmdzIGluIHRoZSBzdGFuZGFyZCB4dGVybSB0ZXJtaW5hbCBlbXVsYXRvci4KCiAgIE5vdGU6IFVuZGVyIFggV2luZG93IGVudmlyb25tZW50LCBWaW0gR1VJIHdvcmtzIGZpbmUgaW4gRmFyc2kgbW9kZS4KCSBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgb2YgYW55IHh0ZXJtIHRlcm1pbmFsIGVtdWxhdG9yLgoKCkJ1Z3MKLS0tLQpXaGlsZSBpbiBpbnNlcnQvcmVwbGFjZSBhbmQgRmFyc2kgbW9kZSBzZXQsIGlmIHlvdSByZXBlYXRlZGx5IGNoYW5nZSB0aGUKY3Vyc29yIHBvc2l0aW9uICh2aWEgY3Vyc29yIG1vdmVtZW50KSBhbmQgZW50ZXIgbmV3IHRleHQgYW5kIHRoZW4gdHJ5IHRvIHVuZG8KdGhlIGxhc3QgY2hhbmdlLCB0aGUgdW5kbyB3aWxsIGxhZyBvbmUgY2hhbmdlIGJlaGluZC4gIEJ1dCBhcyB5b3UgY29udGludWUgdG8KdW5kbywgeW91IHdpbGwgcmVhY2ggdGhlIG9yaWdpbmFsIGxpbmUgb2YgdGV4dC4gIFlvdSBjYW4gYWxzbyB1c2UgVSB0byB1bmRvIGFsbApjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgbGluZS4KCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWdzIHJlZmVyIHRvIHJpbGVmdC50eHQuCgogdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=