Km9zX3Ztcy50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMCBBdWcgMTYKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwKCgoJCQkJCQkJKlZNUyogKnZtcyoKVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwYXJ0aWN1bGFyaXRpZXMgZm9yIHRoZSBWTVMgdmVyc2lvbiBvZiBWaW0uCllvdSBjYW4gcmVhY2ggdGhpcyBpbmZvcm1hdGlvbiBmaWxlIGJ5IHR5cGluZyA6aGVscCBWTVMgaW4gVmltIGNvbW1hbmQKcHJvbXB0LgoKIDEuIEdldHRpbmcgc3RhcnRlZAl8dm1zLXN0YXJ0ZWR8CiAyLiBEb3dubG9hZCBmaWxlcwl8dm1zLWRvd25sb2FkfAogMy4gQ29tcGlsaW5nCQl8dm1zLWNvbXBpbGluZ3wKIDQuIFByb2JsZW1zCQl8dm1zLXByb2JsZW1zfAogNS4gRGVwbG95CQl8dm1zLWRlcGxveXwKIDYuIFByYWN0aWNhbCB1c2FnZQl8dm1zLXVzYWdlfAogNy4gR1VJIG1vZGUgcXVlc3Rpb25zCXx2bXMtZ3VpfAogOC4gVXNlZnVsIG5vdGVzCXx2bXMtbm90ZXN8CiA5LiBWTVMgcmVsYXRlZCBjaGFuZ2VzCXx2bXMtY2hhbmdlc3wKMTAuIEF1dGhvcnMJCXx2bXMtYXV0aG9yc3wKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gR2V0dGluZyBzdGFydGVkCQkJCQkqdm1zLXN0YXJ0ZWQqCgpWaW0gKFZpIElNcHJvdmVkKSBpcyBhIHZpLWNvbXBhdGlibGUgdGV4dCBlZGl0b3IgdGhhdCBydW5zIG9uIG5lYXJseSBldmVyeQpvcGVyYXRpbmcgc3lzdGVtIGtub3duIHRvIGh1bWFuaXR5LiAgTm93IHVzZSBWaW0gb24gT3BlblZNUyB0b28sIGluIGNoYXJhY3RlcgpvciBYL01vdGlmIGVudmlyb25tZW50LiAgSXQgaXMgZnVsbHkgZmVhdHVyZWQgYW5kIGFic29sdXRlbHkgY29tcGF0aWJsZSB3aXRoClZpbSBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMi4gRG93bmxvYWQgZmlsZXMJCQkJCSp2bXMtZG93bmxvYWQqCgpZb3UgY2FuIGRvd25sb2FkIHRoZSBWaW0gc291cmNlIGNvZGUgYnkgZnRwIGZyb20gdGhlIG9mZmljaWFsIFZpbSBzaXRlOgoJZnRwOi8vZnRwLnZpbS5vcmcvcHViL3ZpbS8KT3IgdXNlIG9uZSBvZiB0aGUgbWlycm9yczoKCWZ0cDovL2Z0cC52aW0ub3JnL3B1Yi92aW0vTUlSUk9SUwoKWW91IHdpbGwgbmVlZCBib3RoIHRoZSBVbml4IGFuZCBFeHRyYSBhcmNoaXZlcyB0byBidWlsZCB2aW0uZXhlIGZvciBWTVMuCkZvciB1c2luZyBWaW0ncyBmdWxsIHBvd2VyIHlvdSB3aWxsIG5lZWQgdGhlIHJ1bnRpbWUgZmlsZXMgYXMgd2VsbC4KCllvdSBjYW4gZG93bmxvYWQgcHJlY29tcGlsZWQgZXhlY3V0YWJsZXMgZnJvbToKCWh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCglmdHA6Ly9mdHAucG9sYXJob21lLmNvbS9wdWIvdmltLwoKVG8gdXNlIHRoZSBwcmVjb21waWxlZCBiaW5hcnkgdmVyc2lvbiwgeW91IG5lZWQgb25lIG9mIHRoZXNlIGFyY2hpdmVzOgoKICB2aW0tWFgtZXhlLWlhNjQtZ3VpLnppcCAgICAgICBJQTY0IEdVSS9Nb3RpZiBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtaWE2NC1ndGsuemlwICAgICAgIElBNjQgR1VJL0dUSyBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtaWE2NC10ZXJtLnppcCAgICAgIElBNjQgY29uc29sZSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtYXhwLWd1aS56aXAJQWxwaGEgR1VJL01vdGlmIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtZ3RrLnppcAlBbHBoYSBHVUkvR1RLIGV4ZWN1dGFibGVzCiAgdmltLVhYLWV4ZS1heHAtdGVybS56aXAgICAgICAgQWxwaGEgY29uc29sZSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtdmF4LWd1aS56aXAJVkFYIEdVSSBleGVjdXRhYmxlcwogIHZpbS1YWC1leGUtdmF4LXRlcm0uemlwICAgICAgIFZBWCBjb25zb2xlIGV4ZWN1dGFibGVzCgphbmQgb2YgY291cnNlIChvcHRpb25hbCkKICB2aW0tWFgtcnVudGltZS56aXAJCXJ1bnRpbWUgZmlsZXMKClRoZSBiaW5hcnkgYXJjaGl2ZXMgY29udGFpbjogdmltLmV4ZSwgY3RhZ3MuZXhlLCB4eGQuZXhlIGZpbGVzLgoKRm9yIEdUSyBleGVjdXRhYmxlcyB5b3Ugd2lsbCBuZWVkIEdUS0xJQiB0aGF0IGlzIGF2YWlsYWJsZSBmb3IKQWxwaGEgYW5kIElBNjQgcGxhdGZvcm0uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjMuIENvbXBpbGluZwkJCQkJCSp2bXMtY29tcGlsaW5nKgoKU2VlIHRoZSBmaWxlIFsuU1JDXUlOU1RBTExWTVMuVFhULgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo0LiBQcm9ibGVtcwkJCQkJCSp2bXMtcHJvYmxlbXMqCgpUaGUgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgdW5kZXIgT3BlbiBWTVMgNi4yIC0gOC4yIG9uIEFscGhhLCBWQVggYW5kIElBNjQKcGxhdGZvcm1zIHdpdGggdGhlIERFQyBDIGNvbXBpbGVyLiAgSXQgc2hvdWxkIHdvcmsgd2l0aG91dCBiaWdnZXIgcHJvYmxlbXMuCklmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgc29tZSBpbmNsdWRlIGxpYnJhcmllcyB5b3UgY2FuIHR1bmUgdXAgaW4KT1NfVk1TX0NPTkYuSCBmaWxlLgoKSWYgeW91IGRlY2lkZWQgdG8gYnVpbGQgVmltIHdpdGggK3BlcmwsICtweXRob24sIGV0Yy4gb3B0aW9ucywgZmlyc3QgeW91IG5lZWQKdG8gZG93bmxvYWQgT3BlblZNUyBkaXN0cmlidXRpb25zIG9mIFBlcmwgYW5kIFB5dGhvbi4gIEJ1aWxkIGFuZCBkZXBsb3kgdGhlCmxpYnJhcmllcyBhbmQgY2hhbmdlIGFkZXF1YXRlIGxpbmVzIGluIE1BS0VfVk1TLk1NUyBmaWxlLiAgVGhlcmUgc2hvdWxkIG5vdCBiZQphIHByb2JsZW0gZnJvbSBWaW0gc2lkZS4KCkFsc28gR1RLLCBYUE0gbGlicmFyeSBwYXRocyBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBNQUtFX1ZNUy5NTVMKCk5vdGU6IFVuZGVyIFZBWCBpdCBzaG91bGQgd29yayB3aXRoIHRoZSBERUMgQyBjb21waWxlciB3aXRob3V0IHByb2JsZW1zLiAgVGhlClZBWCBDIGNvbXBpbGVyIGlzIG5vdCBmdWxseSBBTlNJIEMgY29tcGF0aWJsZSBpbiBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZXMKc2VtYW50aWNzLCB0aGVyZWZvcmUgeW91IGhhdmUgdG8gdXNlIGEgY29udmVydGVyIHByb2dyYW0gd2hhdCB3aWxsIGRvIHRoZSBsaW9uCnBhcnQgb2YgdGhlIGpvYi4gIEZvciBkZXRhaWxlZCBpbnN0cnVjdGlvbnMgcmVhZCBmaWxlIElOU1RBTEx2bXMudHh0CgpNTVNfVklNLkVYRSBpcyBidWlsZCB0b2dldGhlciB3aXRoIFZJTS5FWEUsIGJ1dCBmb3IgWEQuRVhFIHlvdSBzaG91bGQKY2hhbmdlIHRvIHN1YmRpcmVjdG9yeSBhbmQgYnVpbGQgaXQgc2VwYXJhdGVseS4KCkNUQUdTIGlzIG5vdCBwYXJ0IG9mIHRoZSBWaW0gc291cmNlIGRpc3RyaWJ1dGlvbiBhbnltb3JlLCBob3dldmVyIHRoZSBPcGVuVk1TCnNwZWNpZmljIHNvdXJjZSBtaWdodCBjb250YWluIENUQUdTIHNvdXJjZSBmaWxlcyBhcyBkZXNjcmliZWQgYWJvdmUuCllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IENUQUdTIG9uIFZNUyBhdApodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vY3RhZ3MvCgpBZHZhbmNlZCB1c2VycyBtYXkgdHJ5IHNvbWUgYWNyb2JhdGljcyBpbiBGRUFUVVJFLkggZmlsZSBhcyB3ZWxsLgoKSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoICt4Zm9udHNldCAreGltIG9wdGlvbnMgdG9vLCBidXQgdGhlbiB5b3UgaGF2ZQp0byBzZXQgdXAgR1VJIGZvbnRzIGV0Yy4gY29ycmVjdGx5LiAgU2VlIDpoZWxwIHhpbSBmcm9tIFZpbSBjb21tYW5kIHByb21wdC4KCllvdSBtYXkgd2FudCB0byB1c2UgR1VJIHdpdGggR1RLIGljb25zLCB0aGVuIHlvdSBoYXZlIHRvIGRvd25sb2FkIGFuZCBpbnN0YWxsCkdUSyBmb3IgT3BlblZNUyBvciBhdCBsZWFzdCBydW50aW1lIHNoYXJlYWJsZSBpbWFnZXMgLSBMSUJHVEsgZnJvbQpwb2xhcmhvbWUuY29tCgpGb3IgbW9yZSBhZHZhbmNlZCBxdWVzdGlvbnMsIHBsZWFzZSBzZW5kIHlvdXIgcHJvYmxlbSB0byBWaW0gb24gVk1TIG1haWxpbmcKbGlzdCA8dmltLXZtc0Bwb2xhcmhvbWUuY29tPgpNb3JlIGFib3V0IHRoZSB2aW0tdm1zIGxpc3QgY2FuIGJlIGZvdW5kIGF0OgpodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vbWFpbG1hbi9saXN0aW5mby92aW0tdm1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjUuIERlcGxveQkJCQkJCSp2bXMtZGVwbG95KgoKVmltIHVzZXMgYSBzcGVjaWFsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZG9jdW1lbnQgYW5kIHJ1bnRpbWUgZmlsZXM6CgogICB2aW0gKG9yIHdoZXJldmVyKQogICAgfC0gdG1wCiAgICB8LSB2aW01NwogICAgfC0tLS0tIGRvYwogICAgfC0tLS0tIHN5bnRheAogICAgfC0gdmltNjIKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXgKICAgIHwtIHZpbTY0CiAgICB8LS0tLS0gZG9jCiAgICB8LS0tLS0gc3ludGF4CiAgICB2aW1yYyAgICAoc3lzdGVtIHJjIGZpbGVzKQogICAgZ3ZpbXJjCgpVc2U6ID4KCglkZWZpbmUvbm9sb2cgVklNCWRldmljZTpbcGF0aC52aW1dCglkZWZpbmUvbm9sb2cgVklNUlVOVElNRSBkZXZpY2U6W3BhdGgudmltLnZpbTYwXQoJZGVmaW5lL25vbG9nIFRNUAlkZXZpY2U6W3BhdGgudG1wXQoKVG8gZ2V0IHZpbS5leGUgdG8gZmluZCBpdHMgZG9jdW1lbnQsIGZpbGV0eXBlLCBhbmQgc3ludGF4IGZpbGVzLCBhbmQgdG8Kc3BlY2lmeSBhIGRpcmVjdG9yeSB3aGVyZSB0ZW1wb3JhcnkgZmlsZXMgd2lsbCBiZSBsb2NhdGVkLiAgQ29weSB0aGUgInJ1bnRpbWUiCnN1YmRpcmVjdG9yeSBvZiB0aGUgVmltIGRpc3RyaWJ1dGlvbiB0byB2aW1ydW50aW1lLgoKTG9naWNhbHMgJFZJTVJVTlRJTUUgYW5kICRUTVAgYXJlIG9wdGlvbmFsLgoKSWYgJFZJTVJVTlRJTUUgaXMgbm90IHNldCwgVmltIHdpbGwgZ3Vlc3MgYW5kIHRyeSB0byBzZXQgdXAgYXV0b21hdGljYWxseS4KUmVhZCBtb3JlIGFib3V0IGl0IGF0IDpoZWxwIHJ1bnRpbWUKCklmICRUTVAgaXMgbm90IHNldCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHNvbWUgZnVuY3Rpb25zIGFzIENUQUdTLApYWEQsIHByaW50aW5nIGV0Yy4gdGhhdCB1c2UgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KVGhlICRUTVAgZGlyZWN0b3J5IHNob3VsZCBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgdGhlIHVzZXIocykuClRoZSBlYXNpZXN0IHdheSB0byBzZXQgdXAgJFRNUCBpcyB0byBkZWZpbmUgYSBsb2dpY2FsOiA+CgoJZGVmaW5lL25vbG9nIFRNUCBTWVMkU0NSQVRDSApvciBhczogPgoJZGVmaW5lL25vbG9nIFRNUCBTWVMkTE9HSU4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNi4gUHJhY3RpY2FsIHVzYWdlCQkJCQkqdm1zLXVzYWdlKgoKVXN1YWxseSwgeW91IHdhbnQgdG8gcnVuIGp1c3Qgb25lIHZlcnNpb24gb2YgVmltIG9uIHlvdXIgc3lzdGVtLCB0aGVyZWZvcmUKaXQgaXMgZW5vdWdoIHRvIGRlZGljYXRlIG9uZSBkaXJlY3RvcnkgZm9yIFZpbS4KQ29weSB0aGUgd2hvbGUgVmltIHJ1bnRpbWUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byB0aGUgZGVwbG95bWVudCBwb3NpdGlvbi4KQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBMT0dJTi5DT00gKGluIFNZUyRMT0dJTiBkaXJlY3RvcnkpLgpTZXQgdXAgdGhlIGxvZ2ljYWwgJFZJTSBhczogPgoKCSQgZGVmaW5lIFZJTSBkZXZpY2U6PHBhdGg+CgpTZXQgdXAgc29tZSBzeW1ib2xzOiA+CgoJJCAhIHZpIHN0YXJ0cyBWaW0gaW4gY2hyLiBtb2RlLgoJJCB2aSptICA6PT0gbWNyIFZJTTpWSU0uRVhFCgoJJCAhZ3ZpIHN0YXJ0cyBWaW0gaW4gR1VJIG1vZGUuCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQgbWNyIFZJTTpWSU0uRVhFIC1nCgpQbGVhc2UsIGNoZWNrIHRoZSBub3RlcyBmb3IgY3VzdG9taXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBzeW1ib2xzLgoKWW91IG1heSB3YW50IHRvIGNyZWF0ZSAudmltcmMgYW5kIC5ndmltcmMgZmlsZXMgaW4geW91ciBob21lIGRpcmVjdG9yeQooU1lTJExPR0lOKSB0byBvdmVyd3JpdGUgZGVmYXVsdCBzZXR0aW5ncy4KClRoZSBlYXNpZXN0IHdheSBpcyBqdXN0IHJlbmFtZSBleGFtcGxlIGZpbGVzLiAgWW91IG1heSBsZWF2ZSB0aGUgbWVudSBmaWxlCihNRU5VLlZJTSkgYW5kIGZpbGVzIHZpbXJjIGFuZCBndmltcmMgaW4gdGhlIG9yaWdpbmFsICRWSU0gZGlyZWN0b3J5LiAgSXQgd2lsbApiZSBkZWZhdWx0IHNldHVwIGZvciBhbGwgdXNlcnMsIGFuZCBmb3IgdXNlcnMgaXQgaXMgZW5vdWdoIGp1c3QgdG8gaGF2ZSB0aGVpcgpvd24gYWRkaXRpb25zIG9yIHJlc2V0dGluZyBpbiB0aGVpciBob21lIGRpcmVjdG9yeSBpbiBmaWxlcyAudmltcmMgYW5kIC5ndmltcmMuCkl0IHNob3VsZCB3b3JrIHdpdGhvdXQgcHJvYmxlbXMuCgpOb3RlOiBSZW1lbWJlciwgc3lzdGVtIHJjIGZpbGVzIChkZWZhdWx0IGZvciBhbGwgdXNlcnMpIGRvbid0IGhhdmUgYSBsZWFkaW5nCiIuIi4gIFNvLCBzeXN0ZW0gcmMgZmlsZXMgYXJlOiA+CgoJJFZJTTp2aW1yYwoJJFZJTTpndmltcmMKCSRWSU06bWVudS52aW0KCmFuZCB1c2VyIGN1c3RvbWl6ZWQgcmMgZmlsZXMgYXJlOiA+CgoJc3lzJGxvZ2luOi52aW1yYwoJc3lzJGxvZ2luOi5ndmltcmMKCllvdSBjYW4gY2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIG9uIHRoZSByaWdodCBwbGFjZSB3aXRoIHRoZSA6dmVyc2lvbiBjb21tYW5kLgoKRXhhbXBsZSBMT0dJTi5DT006ID4KCgkkIGRlZmluZS9ub2xvZyBWSU0gUkYxMDpbVVRJTC5WSU1dCgkkIHZpKm0gOj09IG1jciBWSU06VklNLkVYRQoJJCBndippbTo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOlZJTS5FWEUgLWcgLUdFT01FVFJZIDgweDQwCgkkIHNldCBkaXNwL2NyZWF0ZS9ub2RlPTE5Mi4xNjguNS4yMjMvdHJhbnM9dGNwaXAKCk5vdGU6IFRoaXMgc2V0LXVwIHNob3VsZCBiZSBlbm91Z2gsIGlmIHlvdSBhcmUgd29ya2luZyBvbiBzdGFuZGFsb25lIHNlcnZlciBvcgpjbHVzdGVyZWQgZW52aXJvbm1lbnQsIGJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgVmltIGFzIGludGVybm9kZSBlZGl0b3IgaW4KREVDTkVUIGVudmlyb25tZW50LCBpdCB3aWxsIHNhdGlzZnkgYXMgd2VsbC4KWW91IGp1c3QgaGF2ZSB0byBkZWZpbmUgdGhlICJ3aG9sZSIgcGF0aDogPgoKCSQgZGVmaW5lIFZJTSAiPHNlcnZlcl9uYW1lPlsiInVzZXIgcGFzc3dvcmQiIl06OmRldmljZTo8cGF0aD4iCgkkIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCgpBcyBmb3IgZXhhbXBsZTogPgoKCSQgZGVmaW5lIFZJTSAiUExVVE86OlJGMTA6W1VUSUwuVklNXSIKCSQgZGVmaW5lIFZJTSAiUExVVE8iIlpBWSBteXBhc3MiIjo6UkYxMDpbVVRJTC5WSU1dIiAhIGlmIHBhc3N3ZCByZXF1aXJlZAoKWW91IGNhbiBhbHNvIHVzZSB0aGUgJFZJTVJVTlRJTUUgbG9naWNhbCB0byBwb2ludCB0byB0aGUgcHJvcGVyIHZlcnNpb24gb2YgVmltCmlmIHlvdSBoYXZlIGluc3RhbGxlZCBtb3JlIHZlcnNpb25zIGF0IHRoZSBzYW1lIHRpbWUuICBJZiAkVklNUlVOVElNRSBpcyBub3QKZGVmaW5lZCBWaW0gd2lsbCBib3Jyb3cgaXRzIHZhbHVlIGZyb20gdGhlICRWSU0gbG9naWNhbC4gIFlvdSBjYW4gZmluZCBtb3JlCmluZm9ybWF0aW9uIGFib3V0IHRoZSAkVklNUlVOVElNRSBsb2dpY2FsIGJ5IHR5cGluZyA6aGVscCBydW50aW1lIGFzIGEgVmltCmNvbW1hbmQuCgpTeXN0ZW0gYWRtaW5pc3RyYXRvcnMgbWlnaHQgd2FudCB0byBzZXQgdXAgYSBzeXN0ZW0gd2lkZSBWaW0gaW5zdGFsbGF0aW9uLAp0aGVuIGFkZCB0byB0aGUgU1lTJFNUQVJUVVA6U1lMT0dJQ0FMUy5DT00gPgoKCSQgZGVmaW5lL25vbG9nL3N5cyBWSU0gZGV2aWNlOjxwYXRoPgoJJCBkZWZpbmUvbm9sb2cvc3lzIFRNUCBTWVMkU0NSQVRDSAoKQW5kIHRvIHRoZSBTWVMkU1RBUlRVUDpTWUxPR0lOLkNPTSA+CgoJJCB2aSptIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3YqaW06PT0gc3Bhd24vbm93YWl0L2lucHV0PU5MQTAgbWNyIFZJTTpWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkl0IHdpbGwgc2V0IHVwIGEgbm9ybWFsIFZpbSB3b3JrIGVudmlyb25tZW50IGZvciBldmVyeSB1c2VyIG9uIHRoZSBzeXN0ZW0uCgpJTVBPUlRBTlQ6IFZpbSBvbiBPcGVuVk1TIChhbmQgb24gb3RoZXIgY2FzZSBpbnNlbnNpdGl2ZSBzeXN0ZW0pIGNvbW1hbmQgbGluZQpwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIGxvd2VyY2FzZS4gSW4gb3JkZXIgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbW1hbmQKbGluZSBwYXJhbWV0ZXIgaXMgdXBwZXJjYXNlICIvIiBzaWduIG11c3QgYmUgdXNlZC4KCkV4YW1wbGVzOgogID4KCXZpbSAtUiAgZmlsZW5hbWUgICEgbWVhbnM6IC1yIExpc3Qgc3dhcCBmaWxlcyBhbmQgZXhpdAoJdmltIC0vciBmaWxlbmFtZSAgISBtZWFuczogLVIgUmVhZG9ubHkgbW9kZSAobGlrZSAidmlldyIpCgl2aW0gLXUJPHZpbXJjPiAgICEgbWVhbnM6IC11IFVzZSA8dmltcmM+IGluc3RlYWQgb2YgYW55IC52aW1yYwoJdmltIC0vdSA8Z3ZpbXJjPiAgISBtZWFuczogLVUgVXNlIDxndmltcmM+IGluc3RlYWQgb2YgYW55IC5ndmltcmMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNy4gR1VJIG1vZGUgcXVlc3Rpb25zCQkJCQkqdm1zLWd1aSoKCk9wZW5WTVMgaXMgYSByZWFsIG1haW5mcmFtZSBPUywgdGhlcmVmb3JlIGV2ZW4gaWYgaXQgaGFzIGEgR1VJIGNvbnNvbGUsIG1vc3QKb2YgdGhlIHVzZXJzIGRvIG5vdCB1c2UgYSBuYXRpdmUgWC9XaW5kb3cgZW52aXJvbm1lbnQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdGFydCBWaW0gaW4gR1VJIG1vZGUgImp1c3QgbGlrZSB0aGF0Ii4gIEJ1dCBhbnlob3cgaXQKaXMgbm90IHRvbyBjb21wbGljYXRlZCBlaXRoZXIuCgpGaXJzdCBvZiBhbGw6IHlvdSB3aWxsIG5lZWQgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGJ1aWx0IHdpdGggdGhlIEdVSSBlbmFibGVkLgoKU2Vjb25kOiB5b3UgbmVlZCB0byBoYXZlIGluc3RhbGxlZCBERUNXL01vdGlmIG9uIHlvdXIgVk1TIHNlcnZlciwgb3RoZXJ3aXNlCnlvdSB3aWxsIGdldCBlcnJvcnMgdGhhdCBzb21lIHNoYXJlYWJsZSBsaWJyYXJpZXMgYXJlIG1pc3NpbmcuCgpUaGlyZDogSWYgeW91IGNob29zZSB0byBydW4gVmltIHdpdGggZXh0cmEgZmVhdHVyZXMgc3VjaCBhcyBHVUkvR1RLIHRoZW4geW91Cm5lZWQgYSBHVEsgaW5zdGFsbGF0aW9uIHRvbyBvciBhdCBsZWFzdCBhIEdUSyBydW50aW1lIGVudmlyb25tZW50IChMSUJHVEsKY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LnBvbGFyaG9tZS5jb20vdmltLykuCgoxKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gdGhlIFZNUyBYL01vdGlmIGNvbnNvbGU6CiAgIFN0YXJ0IFZpbSB3aXRoIHRoZSBjb21tYW5kOiA+CgoJJCBtYyBkZXZpY2U6PHBhdGg+VklNLkVYRSAtZwo8CiAgIG9yIHR5cGUgOmd1aSBhcyBhIGNvbW1hbmQgdG8gdGhlIFZpbSBjb21tYW5kIHByb21wdC4gIEZvciBtb3JlIGluZm8gOmhlbHAKICAgZ3VpCgoyKSBJZiB5b3UgYXJlIHdvcmtpbmcgb24gc29tZSBvdGhlciBYL1dpbmRvdyBlbnZpcm9ubWVudCBsaWtlIFVuaXggb3IgYSByZW1vdGUKICAgWCBWTVMgY29uc29sZS4gIFNldCB1cCBkaXNwbGF5IHRvIHlvdXIgaG9zdCB3aXRoOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT08eW91ciBJUCBhZGRyZXNzPi90cmFucz08dHJhbnNwb3J0LW5hbWU+CjwKICAgYW5kIHN0YXJ0IFZpbSBhcyBpbiBwb2ludCAxLiAgWW91IGNhbiBmaW5kIG1vcmUgaGVscCBpbiBWTVMgZG9jdW1lbnRhdGlvbiBvcgogICB0eXBlOiBoZWxwIHNldCBkaXNwIGluIFZNUyBwcm9tcHQuCiAgIEV4YW1wbGVzOiA+CgoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5CQkgISBkZWZhdWx0IHRyYW5zIGlzIERFQ25ldAoJJCBzZXQgZGlzcC9jcmVhdGUvbm9kZT0xOTIuMTY4LjUuMTU5L3RyYW5zPXRjcGlwICEgVENQL0lQIG5ldHdvcmsKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9MTkyLjE2OC41LjE1OS90cmFucz1sb2NhbCAhIGRpc3BsYXkgb24gdGhlIHNhbWUgbm9kZQoKTm90ZTogeW91IHNob3VsZCBkZWZpbmUganVzdCBvbmUgb2YgdGhlc2UuCkZvciBtb3JlIGluZm9ybWF0aW9uIHR5cGUgJGhlbHAgc2V0IGRpc3AgaW4gVk1TIHByb21wdC4KCjMpIEFub3RoZXIgZWxlZ2FudCBzb2x1dGlvbiBpcyBYRE0gaWYgeW91IGhhdmUgaW5zdGFsbGVkIG9uIE9wZW5WTVMgYm94LgogICBJdCBpcyBwb3NzaWJsZSB0byB3b3JrIGZyb20gWERNIGNsaWVudCBhcyBmcm9tIEdVSSBjb25zb2xlLgoKNCkgSWYgeW91IGFyZSB3b3JraW5nIG9uIE1TLVdpbmRvd3Mgb3Igc29tZSBvdGhlciBub24gWC9XaW5kb3cgZW52aXJvbm1lbnQKICAgeW91IG5lZWQgdG8gc2V0IHVwIG9uZSBYIHNlcnZlciBhbmQgcnVuIFZpbSBhcyBpbiBwb2ludCAyLgogICBGb3IgTVMtV2luZG93cyB0aGVyZSBhcmUgYXZhaWxhYmxlIGZyZWUgWCBzZXJ2ZXJzIGFzIE1JWCAsIE9tbmkgWCBldGMuLAogICBhcyB3ZWxsIGFzIGV4Y2VsbGVudCBjb21tZXJjaWFsIHByb2R1Y3RzIGFzIGVYY3Vyc2lvbiBvciBSZWZsZWN0aW9uWCB3aXRoCiAgIGJ1aWx0LWluIERFQyBzdXBwb3J0LgoKUGxlYXNlIG5vdGUsIHRoYXQgZXhlY3V0YWJsZXMgd2l0aG91dCBHVUkgYXJlIHNsaWdodGx5IGZhc3RlciBkdXJpbmcgc3RhcnR1cAp0aGVuIHdpdGggZW5hYmxlZCBHVUkgaW4gY2hhcmFjdGVyIG1vZGUuIFRoZXJlZm9yZSwgaWYgeW91IGRvIG5vdCB1c2UgR1VJCmZlYXR1cmVzLCBpdCBpcyB3b3J0aCB0byBjaG9vc2Ugbm9uIEdVSSBleGVjdXRhYmxlcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOC4gVXNlZnVsIG5vdGVzCQkJCQkJKnZtcy1ub3RlcyoKCjguMSBCYWNrc3BhY2UvZGVsZXRlCjguMiBGaWx0ZXJzCjguMyBWTVMgZmlsZSB2ZXJzaW9uIG51bWJlcnMKOC40IERpcmVjdG9yeSBjb252ZXJzaW9uCjguNSBSZW1vdGUgaG9zdCBpbnZvY2F0aW9uCjguNiBUZXJtaW5hbCBwcm9ibGVtcwo4LjcgSGV4LWVkaXRpbmcgYW5kIG90aGVyIGV4dGVybmFsIHRvb2xzCjguOCBTb3VyY2luZyB2aW1yYyBhbmQgZ3ZpbXJjCjguOSBQcmludGluZyBmcm9tIFZpbQo4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKOC4xMSBkaWZmIGFuZCBvdGhlciBHTlUgcHJvZ3JhbXMKOC4xMiBkaWZmLW1vZGUKOC4xMyBBbGxvdyAnJCcgaW4gQyBrZXl3b3Jkcwo4LjE0IFZJTVRVVE9SIGZvciBiZWdpbm5lcnMKOC4xNSBTbG93IHN0YXJ0IGluIGNvbnNvbGUgbW9kZSBpc3N1ZSAKOC4xNiBDb21tb24gVklNIGRpcmVjdG9yeSAtIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIAoKOC4xIEJhY2tzcGFjZS9kZWxldGUKClRoZXJlIGFyZSBiYWNrc3BhY2UvZGVsZXRlIGtleSBpbmNvbnNpc3RlbmNpZXMgd2l0aCBWTVMuCjpmaXhkZWwgZG9lc24ndCBkbyB0aGUgdHJpY2ssIGJ1dCB0aGUgc29sdXRpb24gaXM6ID4KCgk6aW5vcmVtYXAgXj8gXkgJCSIgZm9yIHRlcm1pbmFsIG1vZGUKCTppbm9yZW1hcCA8RGVsPiBeSAkiIGZvciBndWkgbW9kZQoKUmVhZCBtb3JlIGluIGNoOiA4LjYgKFRlcm1pbmFsIHByb2JsZW1zKS4KKEJydWNlIEh1bnNha2VyIDxCTkh1bnNha2VyQGNocS5ieXUuZWR1PiBWaW0gNS4zKQoKCjguMiBGaWx0ZXJzCgpWaW0gc3VwcG9ydHMgZmlsdGVycywgaS5lLiwgaWYgeW91IGhhdmUgYSBzb3J0IHByb2dyYW0gdGhhdCBjYW4gaGFuZGxlCmlucHV0L291dHB1dCByZWRpcmVjdGlvbiBsaWtlIFVuaXggKDxpbmZpbGUgPm91dGZpbGUpLCB5b3UgY291bGQgdXNlID4KCgk6bWFwIFxzIDAhJ2Fxc29ydDxDUj4KCihDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gPGNlY0BncnlwaG9uLmdzZmMubmFzYS5nb3Y+IFZpbSA1LjQpCgoKOC4zIFZNUyBmaWxlIHZlcnNpb24gbnVtYmVycwoKVmltIGlzIHNhdmluZyBmaWxlcyBpbnRvIGEgbmV3IGZpbGUgd2l0aCB0aGUgbmV4dCBoaWdoZXIgZmlsZSB2ZXJzaW9uCm51bWJlciwgdHJ5IHRoZXNlIHNldHRpbmdzLiA+CgoJOnNldCBub2JhY2t1cAkgICAgICIgZG9lcyBub3QgY3JlYXRlICouKl8gYmFja3VwIGZpbGVzCgk6c2V0IG5vd3JpdGViYWNrdXAgICAiIGRvZXMgbm90IGhhdmUgYW55IHB1cnBvc2Ugb24gVk1TLiAgSXQncyB0aGUKCQkJICAgICAiIGRlZmF1bHQuCgpSZWNvdmVyeSBpcyB3b3JraW5nIHBlcmZlY3QgYXMgd2VsbCBmcm9tIHRoZSBkZWZhdWx0IHN3YXAgZmlsZS4KUmVhZCBtb3JlIHdpdGggOmhlbHAgc3dhcGZpbGUKCihDbGF1ZGUgTWFyaW5pZXIgPENsYXVkZU1hcmluaWVyQHh3YXZlc29sdXRpb25zLmNvbT4gVmltIDUuNSwgWm9sdGFuIEFycGFkZmZ5ClZpbSA1LjYpCgoKOC40IERpcmVjdG9yeSBjb252ZXJzaW9uCgpWaW0gd2lsbCBpbnRlcm5hbGx5IGNvbnZlcnQgYW55IHVuaXgtc3R5bGUgcGF0aHMgYW5kIGV2ZW4gbWl4ZWQgdW5peC9WTVMKcGF0aHMgaW50byBWTVMgc3R5bGUgcGF0aHMuICBTb21lIHR5cGljYWwgY29udmVyc2lvbnMgcmVzZW1ibGU6CgoJL2FiYy9kZWYvZ2hpCQktPiBhYmM6W2RlZl1naGkuCgkvYWJjL2RlZi9naGkuagkJLT4gYWJjOltkZWZdZ2hpLmoKCS9hYmMvZGVmL2doaS5qOzIJLT4gYWJjOltkZWZdZ2hpLmo7MgoJL2FiYy9kZWYvZ2hpL2prbC9tbm8JLT4gYWJjOltkZWYuZ2hpLmprbF1tbm8uCglhYmM6W2RlZi5naGldamtsL21ubwktPiBhYmM6W2RlZi5naGkuamtsXW1uby4KCSAgLi8JCQktPiBjdXJyZW50IGRpcmVjdG9yeQoJICAuLi8JCQktPiByZWxhdGl2ZSBwYXJlbnQgZGlyZWN0b3J5CgkgIFsuZGVmLmdoaV0JCS0+IHJlbGF0aXZlIGNoaWxkIGRpcmVjdG9yeQoJICAgLi9kZWYvZ2hpCQktPiByZWxhdGl2ZSBjaGlsZCBkaXJlY3RvcnkKCk5vdGU6IFlvdSBtYXkgdXNlIDwsPiBicmFja2V0cyBhcyB3ZWxsIChkZXZpY2U6PHBhdGg+ZmlsZS5leHQ7dmVyc2lvbikgYXMKcmYxMDo8dXNlci56YXkud29yaz50ZXN0LmM7MQoKKERhdmlkIEVsaW5zIDxkZWxpbnNAZm9saWFnZS5jb20+LCBKZXJvbWUgTGF1cmV0CjxKTEFVUkVUQG1haWwuY2hlbS5zdW55c2IuZWR1PiBWaW0gNS42ICkKCgo4LjUgUmVtb3RlIGhvc3QgaW52b2NhdGlvbgoKSXQgaXMgcG9zc2libGUgdG8gdXNlIFZpbSBhcyBhbiBpbnRlcm5vZGUgZWRpdG9yLgoxLiBFZGl0IHNvbWUgZmlsZSBmcm9tIHJlbW90ZSBub2RlOiA+CgoJdmkgIjxzZXJ2ZXI+IiJ1c2VybmFtZSBwYXNzd2QiIjo6PGRldmljZT46PHBhdGg+PGZpbGVuYW1lPjs8dmVyc2lvbj4iCgpFeGFtcGxlOiA+Cgl2aSAicGx1dG8iInpheSBwYXNzd2QiIjo6UkYxMDo8VVNFUi5aQVkuV09SSz5URVNULkM7MSIKCk5vdGU6IHN5bnRheCBpcyB2ZXJ5IGltcG9ydGFudCwgb3RoZXJ3aXNlIFZNUyB3aWxsIHJlY29nbml6ZSBtb3JlIHBhcmFtZXRlcnMKaW5zdGVhZCBvZiBvbmUgKHJlc3VsdGluZyB3aXRoOiBmaWxlIG5vdCBmb3VuZCkKCjIuICBTZXQgdXAgVmltIGFzIHlvdXIgaW50ZXJub2RlIGVkaXRvci4gIElmIFZpbSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIKaG9zdCwganVzdCBzZXQgdXAgeW91ciBJUCBhZGRyZXNzLCB0aGUgZnVsbCBWaW0gcGF0aCBpbmNsdWRpbmcgdGhlIHNlcnZlciBuYW1lCmFuZCBydW4gdGhlIGNvbW1hbmQgcHJvY2VkdXJlIGJlbG93OiA+CgoJJCBpZiAocDEgLmVxcy4gIiIpIC5PUi4gKHAyIC5lcXMuICIiKSB0aGVuIGdvdG8gdXNhZ2UKCSQgc2V0IGRpc3AvY3JlYXRlL25vZGU9PHlvdXJfSVBfaGVyZT4vdHJhbnM9dGNwaXAKCSQgZGVmaW5lICJWSU0gIjx2aW1fc2VydmVyPiIiJydwMScgJydwMiciIjo6PGRldmljZT46PHZpbV9wYXRoPiIKCSQgIHZpKm0gOj09ICJtY3IgVklNOlZJTS5FWEUiCgkkIGd2KmltIDo9PSAic3Bhd24vbm93YWl0IG1jciBWSU06VklNLkVYRSAtZyIKCSQgZ290byBlbmQKCSQgdXNhZ2U6CgkkIHdyaXRlIHN5cyRvdXRwdXQgIiBQbGVhc2UgZW50ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFzIGEgcGFyYW1ldGVyLiIKCSQgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGU6IEBTRVRWSU0uQ09NIHVzZXJuYW1lIHBhc3N3ZCIKCSQgZW5kOgoKTm90ZTogTmV2ZXIgdXNlIGl0IGluIGEgY2x1c3RlcmVkIGVudmlyb25tZW50ICh5b3UgZG8gbm90IG5lZWQgaXQpLCBsb2FkaW5nCmNvdWxkIGJlIHZlcnktdmVyeSBzbG93LCBidXQgZXZlbiBmYXN0ZXIgdGhhbiBhIGxvY2FsIEVtYWNzLiA6LSkKCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCgoKOC42IFRlcm1pbmFsIHByb2JsZW1zCgpJZiB5b3VyIHRlcm1pbmFsIG5hbWUgaXMgbm90IGtub3duIHRvIFZpbSBhbmQgaXQgaXMgdHJ5aW5nIHRvIGZpbmQgdGhlIGRlZmF1bHQKb25lIHlvdSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgZHVyaW5nIHN0YXJ0LXVwOgotLS0KVGVybWluYWwgZW50cnkgbm90IGZvdW5kIGluIHRlcm1jYXAKJ3Vua25vd24tdGVybWluYWwnIG5vdCBrbm93bi4gIEF2YWlsYWJsZSBidWlsdC1pbiB0ZXJtaW5hbHMgYXJlOgogICAgYnVpbHRpbl9ndWkKICAgIGJ1aWx0aW5fcmlzY29zCiAgICBidWlsdGluX2FtaWdhCiAgICBidWlsdGluX2Jlb3MtYW5zaQogICAgYnVpbHRpbl9hbnNpCiAgICBidWlsdGluX3Z0MzIwCiAgICBidWlsdGluX3Z0NTIKICAgIGJ1aWx0aW5fcGNhbnNpCiAgICBidWlsdGluX3dpbjMyCiAgICBidWlsdGluX3h0ZXJtCiAgICBidWlsdGluX2lyaXMtYW5zaQogICAgYnVpbHRpbl9kZWJ1ZwogICAgYnVpbHRpbl9kdW1iCmRlZmF1bHRpbmcgdG8gJ3Z0MzIwJwotLS0KVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmluZSBkZWZhdWx0IHRlcm1pbmFsIG5hbWU6ID4KCgkkICEgdW5rbm93biB0ZXJtaW5hbCBuYW1lLiAgTGV0IHVzIHVzZSB2dDMyMCBvciBhbnNpIGluc3RlYWQuCgkkICEgTm90ZTogaXQncyBjYXNlIHNlbnNpdGl2ZQoJJCBkZWZpbmUgdGVybSAidnQzMjAiCgpUZXJtaW5hbHMgZnJvbSBWVDEwMCB0byBWVDMyMCAoYXMgVjMwMCwgVlQyMjAsIFZUMjAwICkgZG8gbm90IG5lZWQgYW55IGV4dHJhCmtleWJvYXJkIG1hcHBpbmdzLiAgVGhleSBzaG91bGQgd29yayBwZXJmZWN0IGFzIHRoZXkgYXJlLCBpbmNsdWRpbmcgYXJyb3dzLApJbnMsIERlbCBidXR0b25zIGV0Yy4sIGV4Y2VwdCBCYWNrc3BhY2UgaW4gR1VJIG1vZGUuICBUbyBzb2x2ZSBpdCwgYWRkIHRvCi5ndmltcmM6ID4KCglpbm9yZW1hcCA8RGVsPiA8QlM+CgpWaW0gd2lsbCBhbHNvIHJlY29nbml6ZSB0aGF0IHRoZXkgYXJlIGZhc3QgdGVybWluYWxzLgoKSWYgeW91IGhhdmUgc29tZSBhbm5veWluZyBsaW5lIGp1bXBpbmcgb24gdGhlIHNjcmVlbiBiZXR3ZWVuIHdpbmRvd3MgYWRkIHRvCnlvdXIgLnZpbXJjIGZpbGU6ID4KCglzZXQgdHR5ZmFzdAkiIHNldCBmYXN0IHRlcm1pbmFsCgpOb3RlOiBpZiB5b3UncmUgdXNpbmcgVmltIG9uIHJlbW90ZSBob3N0IG9yIHRocm91Z2ggdmVyeSBzbG93IGNvbm5lY3Rpb24sIGl0J3MKcmVjb21tZW5kZWQgdG8gYXZvaWQgZmFzdCB0ZXJtaW5hbCBvcHRpb24gd2l0aDogPgoKCXNldCBub3R0eWZhc3QgICAiIHNldCB0ZXJtaW5hbCB0byBzbG93IG1vZGUKCihab2x0YW4gQXJwYWRmZnksIFZpbSA1LjYpCgoKOC43IEhleC1lZGl0aW5nIGFuZCBvdGhlciBleHRlcm5hbCB0b29scwoKQSB2ZXJ5IGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gT3BlblZNUyBhbmQgb3RoZXIgc3lzdGVtcyBpcyB0aGF0IFZNUyB1c2VzCnNwZWNpYWwgY29tbWFuZHMgdG8gZXhlY3V0ZSBleGVjdXRhYmxlczogPgoKCVJVTiA8cGF0aD5maWxlbmFtZQoJTUNSIDxwYXRoPmZpbGVuYW1lIDxwYXJhbWV0ZXJzPgoKT3BlblZNUyB1c2VycyBhbHdheXMgaGF2ZSB0byBiZSBhd2FyZSB0aGF0IHRoZSBWaW0gY29tbWFuZCA6ISAianVzdCIgZHJvcCB0aGVtCnRvIERDTCBwcm9tcHQuICBUaGlzIGZlYXR1cmUgaXMgcG9zc2libGUgdG8gdXNlIHdpdGhvdXQgYW55IHByb2JsZW0gd2l0aCBhbGwKRENMIGNvbW1hbmRzLCBidXQgaWYgd2Ugd2FudCB0byBleGVjdXRlIHNvbWUgcHJvZ3JhbSBhcyBYWEQsIENUQUdTLCBKVEFHUyBldGMuCndlJ3JlIHJ1bm5pbmcgaW50byB0cm91YmxlIGlmIHdlIGZvbGxvdyB0aGUgVmltIGRvY3VtZW50YXRpb24gKHNlZTogaGVscAp4eGQpLgoKU29sdXRpb246IEV4ZWN1dGUgd2l0aCB0aGUgTUMgY29tbWFuZCBhbmQgYWRkIHRoZSBmdWxsIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUuCkV4YW1wbGU6IEluc3RlYWQgb2YgOiUheHhkIGNvbW1hbmQgdXNlOiA+CgoJOiUhbWMgdmltOnh4ZAoKLi4uIG9yIGluIGdlbmVyYWw6ID4KCTohbWMgPHBhdGg+ZmlsZW5hbWUgPHBhcmFtZXRlcnM+CgpOb3RlOiBZb3UgY2FuIHVzZSBYWEQgYW5kIENUQUdTIGZyb20gR1VJIG1lbnUuCgpUbyBjdXN0b21pemUgY3RhZ3MgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBsb2dpY2FsICRDVEFHUyB3aXRoIHN0YW5kYXJkCnBhcmFtZXRlcnMgYXM6ID4KCglkZWZpbmUvbm9sb2cgQ1RBR1MgIi0tdG90YWxzIC1vIHN5cyRsb2dpbjp0YWdzIgoKRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHBsZWFzZSByZWFkIDpoZWxwIHRhZ3NlYXJjaCBhbmQgQ1RBR1MKZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0L2N0YWdzLmh0bWwuCgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNS42LTcwKQoKCjguOCBTb3VyY2luZyB2aW1yYyBhbmQgZ3ZpbXJjCgpJZiB5b3Ugd2FudCB0byB1c2UgeW91ciAudmltcmMgYW5kIC5ndmltcmMgZnJvbSBvdGhlciBwbGF0Zm9ybXMgKGUuZy4gV2luZG93cykKeW91IGNhbiBnZXQgaW4gdHJvdWJsZSBpZiB5b3UgZnRwIHRoYXQgZmlsZShzKTogVk1TIGhhcyBkaWZmZXJlbnQgZW5kLW9mLWxpbmUKaW5kaWNhdGlvbi4KVGhlIHN5bXB0b20gaXMgdGhhdCBWaW0gaXMgbm90IHNvdXJjaW5nIHlvdXIgLnZpbXJjLy5ndmltcmMsIGV2ZW4gaWYgeW91IHNheToKPgoJOnNvIHN5cyRsb2dpbjoudmltcmMKCk9uZSB0cmljayBpcyB0byBjb21wcmVzcyAoZS5nLiB6aXApIHRoZSBmaWxlcyBvbiB0aGUgb3RoZXIgcGxhdGZvcm0gYW5kCnVuY29tcHJlc3MgaXQgb24gVk1TOyBpZiB5b3UgaGF2ZSB0aGUgc2FtZSBzeW1wdG9tLCB0cnkgdG8gY3JlYXRlIHRoZSBmaWxlcwp3aXRoIGNvcHktcGFzdGUgKGZvciB0aGlzIHlvdSBuZWVkIGJvdGggb3AuIHN5c3RlbXMgcmVhY2hhYmxlIGZyb20gb25lCm1hY2hpbmUsIGUuZy4gYW4gWHRlcm0gb24gV2luZG93cyBvciB0ZWxuZXQgdG8gV2luZG93cyBmcm9tIFZNUykuCgooU2FuZG9yIEtvcGFueWksIDxzYW5kb3Iua29wYW55aUBtYWlsYm94Lmh1PiBWaW0gNi4wYSkKCgo4LjkgUHJpbnRpbmcgZnJvbSBWaW0KClRvIGJlIGFibGUgdG8gcHJpbnQgZnJvbSBWaW0gKHJ1bm5pbmcgaW4gR1VJIG1vZGUpIHVuZGVyIFZNUyB5b3UgaGF2ZSB0byBzZXQKdXAgJFRNUCBsb2dpY2FsIHdoaWNoIHNob3VsZCBwb2ludCB0byBzb21lIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGxvZ2ljYWwKU1lTJFBSSU5UIHRvIHlvdXIgZGVmYXVsdCBwcmludCBxdWV1ZS4KRXhhbXBsZTogPgoKCSRkZWZpbmUgU1lTJFBSSU5UIEhQNUFOU0kKCllvdSBjYW4gcHJpbnQgb3V0IHdob2xlIGJ1ZmZlciBvciBqdXN0IHRoZSBtYXJrZWQgYXJlYS4KTW9yZSBpbmZvIHVuZGVyIDpoZWxwIGhhcmRjb3B5CgooWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4wYykKCgo4LjEwIFNldHRpbmcgdXAgdGhlIHN5bWJvbHMKCldoZW4gSSB1c2UgR1ZJTSB0aGlzIHdheSBhbmQgcHJlc3MgQ1RSTC1ZIGluIHRoZSBwYXJlbnQgdGVybWluYWwsIGd2aW0gZXhpdHMuCkkgbm93IHVzZSBhIGRpZmZlcmVudCBzeW1ib2wgdGhhdCBzZWVtcyB0byB3b3JrIE9LIGFuZCBmaXhlcyB0aGUgcHJvYmxlbS4KSSBzdWdnZXN0IHRoaXMgaW5zdGVhZDogPgoKCSQgR1YqSU06PT1TUEFXTi9OT1dBSVQvSU5QVVQ9TkxBMDogTUNSIFZJTTpWSU0uRVhFIC1HIC1HRU9NRVRSWSA4MFg0MAoKVGhlIC9JTlBVVD1OTEEwOiBzZXBhcmF0ZXMgdGhlIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBndmltIHByb2Nlc3MgZnJvbSB0aGUKcGFyZW50IHRlcm1pbmFsLCB0byBibG9jayBzaWduYWxzIGZyb20gdGhlIHBhcmVudCB3aW5kb3cuCldpdGhvdXQgdGhlIC1HRU9NRVRSWSwgdGhlIEdWSU0gd2luZG93IHNpemUgd2lsbCBiZSBtaW5pbWFsIGFuZCB0aGUgbWVudQp3aWxsIGJlIGNvbmZ1c2VkIGFmdGVyIGEgd2luZG93LXJlc2l6ZS4KCihDYXJsbyBNZWtlbmthbXAsIENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMGFjKQoKCjguMTEgZGlmZiBhbmQgb3RoZXIgR05VIHByb2dyYW1zCgpGcm9tIDYuMCBkaWZmIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIGJ1dCBPcGVuVk1TIGRvZXMgbm90IHVzZQpHTlUvVW5peCBsaWtlIGRpZmYgdGhlcmVmb3JlIGJ1aWx0IGluIGRpZmYgZG9lcyBub3Qgd29yay4KVGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gdG8gc29sdmUgdGhpcyBhbm9tYWx5LiAgSW5zdGFsbCBhIFVuaXggbGlrZSBkaWZmCmFuZCBWaW0gd2lsbCB3b3JrIHBlcmZlY3QgaW4gZGlmZiBtb2RlIHRvby4gIFlvdSBqdXN0IGhhdmUgdG8gcmVkZWZpbmUgeW91cgpkaWZmIHByb2dyYW0gYXM6ID4KCglkZWZpbmUgL25vbG9nIGRpZmYgPEdOVV9QQVRIPmRpZmYuZXhlCgpBbm90aGVyLCBtb3JlIHNvcGhpc3RpY2F0ZWQgc29sdXRpb24gaXMgZGVzY3JpYmVkIGJlbG93ICg4LjEyIGRpZmYtbW9kZSkKVGhlcmUgYXJlIHNvbWUgb3RoZXIgcHJvZ3JhbXMgYXMgcGF0Y2gsIG1ha2UgZXRjIHRoYXQgbWF5IGNhdXNlIHNhbWUgcHJvYmxlbXMuCkF0IHd3dy5wb2xhcmhvbWUuY29tIGlzIHBvc3NpYmxlIHRvIGRvd25sb2FkIGFuIEdOVSBwYWNrYWdlIGZvciBBbHBoYSBhbmQgVkFYCmJveGVzIHRoYXQgaXMgbWVhbnQgdG8gc29sdmUgR05VIHByb2JsZW1zIG9uIE9wZW5WTVMuCiggWm9sdGFuIEFycGFkZmZ5LCBWaW0gNi4xKQoKCjguMTIgZGlmZi1tb2RlCgpWaW0gNi4wIGFuZCBoaWdoZXIgc3VwcG9ydHMgVmltIGRpZmYtbW9kZSAoU2VlIHxuZXctZGlmZi1tb2RlfCwgfGRpZmYtbW9kZXwKYW5kIHwwOC43fCkuICBUaGlzIHVzZXMgdGhlIGV4dGVybmFsIHByb2dyYW0gJ2RpZmYnIGFuZCBleHBlY3RzIGEgVW5peC1saWtlCm91dHB1dCBmb3JtYXQgZnJvbSBkaWZmLiAgVGhlIHN0YW5kYXJkIFZNUyBkaWZmIGhhcyBhIGRpZmZlcmVudCBvdXRwdXQKZm9ybWF0LiAgVG8gdXNlIFZpbSBvbiBWTVMgaW4gZGlmZi1tb2RlLCB5b3UgbmVlZCB0bzoKICAgIDEgSW5zdGFsbCBhIFVuaXgtbGlrZSBkaWZmIHByb2dyYW0sIGUuZy4gR05VIGRpZmYKICAgIDIgVGVsbCBWaW0gdG8gdXNlIHRoZSBVbml4LWxpa2UgZGlmZiBmb3IgZGlmZi1tb2RlLgoKWW91IGNhbiBkb3dubG9hZCBHTlUgZGlmZiBmcm9tIHRoZSBWSU0tVk1TIHdlYnNpdGUsIGl0IGlzIG9uZSBvZiB0aGUgR05VCnRvb2xzIGluIGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vZmlsZXMvZ251X3Rvb2xzLnppcC4gIEkgc3VnZ2VzdCB0bwp1bnBhY2sgaXQgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgIkdOVSIgYW5kIGNyZWF0ZSBhIGxvZ2ljYWwgR05VOiB0aGF0CnBvaW50cyB0byB0aGF0IGRpcmVjdG9yeSwgZS5nOiA+CgogICBERUZJTkUgR05VICAgIDxESVNLPjpbPERJUkVDVE9SWT4uQklOLkdOVV0KCllvdSBtYXkgYWxzbyB3YW50IHRvIGRlZmluZSBhIHN5bWJvbCBHRElGRiwgdG8gdXNlIHRoZSBHTlUgZGlmZiBmcm9tIHRoZSBEQ0wKcHJvbXB0OiA+CgogICBHRElGRiA6PT0gICAgICRHTlU6RElGRi5FWEUKCk5vdyB5b3UgbmVlZCB0byB0ZWxsIFZpbSB0byB1c2UgdGhlIG5ldyBkaWZmIHByb2dyYW0uICBUYWtlIHRoZSBleGFtcGxlCnNldHRpbmdzIGZyb20gfGRpZmYtZGlmZmV4cHJ8IGFuZCBjaGFuZ2UgdGhlIGNhbGwgdG8gdGhlIGV4dGVybmFsIGRpZmYKcHJvZ3JhbSB0byB0aGUgbmV3IGRpZmYgb24gVk1TLiAgQWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZTogPgoKICAgICAiIFNldCB1cCB2aW1kaWZmIG9wdGlvbnMKICAgICAgIGlmIHY6dmVyc2lvbiA+PSA2MDAKCSIgVXNlIEdOVSBkaWZmIG9uIFZNUwoJc2V0IGRpZmZleHByPU15RGlmZigpCglmdW5jdGlvbiBNeURpZmYoKQoJICAgbGV0IG9wdCA9ICIiCgkgICBpZiAmZGlmZm9wdCA9fiAiaWNhc2UiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWkgIgoJICAgZW5kaWYKCSAgIGlmICZkaWZmb3B0ID1+ICJpd2hpdGUiCgkgICAgIGxldCBvcHQgPSBvcHQgLiAiLWIgIgoJICAgZW5kaWYKCSAgIHNpbGVudCBleGVjdXRlICIhbWMgR05VOmRpZmYuZXhlIC1hICIgLiBvcHQgLiB2OmZuYW1lX2luIC4gIiAiIC4gIHY6Zm5hbWVfbmV3IC4KCQlcICAiID4gIiAuIHY6Zm5hbWVfb3V0CgllbmRmdW5jdGlvbgogICAgICBlbmRpZgoKWW91IGNhbiBub3cgdXNlIFZpbSBpbiBkaWZmLW1vZGUsIGUuZy4gdG8gY29tcGFyZSB0d28gZmlsZXMgaW4gcmVhZC1vbmx5Cm1vZGU6ID4KCiAgICAkIFZJTSAtRC9SIDxGSUxFMT4gPEZJTEUyPgoKWW91IGNhbiBhbHNvIGRlZmluZSBuZXcgc3ltYm9scyBmb3IgdmltZGlmZiwgZS5nLjogPgoKICAgICQgVklNRElGRiAgICAgOj09ICdWSU0nIC1EL1IKICAgICQgR1ZJTURJRkYgICAgOj09ICdHVklNJyAtRC9SCgpZb3UgY2FuIG5vdyBjb21wYXJlIGZpbGVzIGluIDQgd2F5czogPgoKICAgIDEuIFZNUyAgZGlmZjogICQgRElGRiAgICAgPEZJTEUxPiA8RklMRTI+CiAgICAyLiBHTlUgIGRpZmY6ICAkIEdESUZGICAgIDxGSUxFMT4gPEZJTEUyPgogICAgMy4gVklNICBkaWZmOiAgJCBWSU1ESUZGICA8RklMRTE+IDxGSUxFMj4KICAgIDQuIEdWSU0gZGlmZjogICQgR1ZJTURJRkYgPEZJTEUxPiA8RklMRTI+CgooIENvZW4gRW5nZWxiYXJ0cywgVmltIDYuMSkKCgo4LjEzIEFsbG93ICckJyBpbiBDIGtleXdvcmRzCgpERUMgQyB1c2VzIG1hbnkgaWRlbnRpZmllcnMgd2l0aCAnJCcgaW4gdGhlbS4gIFRoaXMgaXMgbm90IGFsbG93ZWQgaW4gQU5TSSBDLAphbmQgVmltIHJlY29nbmlzZXMgdGhlICckJyBhcyB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyLiAgWW91IGNhbiBjaGFuZ2UgdGhpcwp3aXRoIHRoZSAnaXNrZXl3b3JkJyBvcHRpb24uCkFkZCB0aGlzIGNvbW1hbmQgdG8geW91ciAudmltcmMgZmlsZTogPgoKICAgIGF1dG9jbWQgRmlsZVR5cGUgYyxjcHAsY3MgIHNldCBpc2tleXdvcmQrPSQKCllvdSBjYW4gYWxzbyBjcmVhdGUgdGhlIGZpbGUocykgJFZJTS9GVFBMVUdJTi9DLlZJTSAoYW5kL29yIENQUC5WSU0gYW5kCkNTLlZJTSkgYW5kIGFkZCB0aGlzIGNvbW1hbmQ6ID4KCglzZXQgaXNrZXl3b3JkKz0kCgpOb3cgd29yZC1iYXNlZCBjb21tYW5kcywgZS5nLiB0aGUgJyonLXNlYXJjaC1jb21tYW5kIGFuZCB0aGUgQ1RSTC1dCnRhZy1sb29rdXAsIHdvcmsgb24gdGhlIHdob2xlIGlkZW50aWZpZXIuICAoQ3RhZ3Mgb24gVk1TIGFsc28gc3VwcG9ydHMgJyQnIGluCkMga2V5d29yZHMgc2luY2UgY3RhZ3MgdmVyc2lvbiA1LjEuKQoKKCBDb2VuIEVuZ2VsYmFydHMsIFZpbSA2LjEpCgo4LjE0IFZJTVRVVE9SIGZvciBiZWdpbm5lcnMKCkl0IGV4aXRzIFZJTVRVVE9SLkNPTSBEQ0wgc2NyaXB0IHRoYXQgY2FuIGhlbHAgVmltIGJlZ2lubmVycyB0byBsZWFybi9tYWtlCmZpcnN0IHN0ZXBzIHdpdGggVmltIG9uIE9wZW5WTVMuICBEZXBlbmRpbmcgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbiB5b3UgbWF5CnN0YXJ0IGl0IHdpdGg6ID4KCglAdmltOnZpbXR1dG9yCgooVGhvbWFzLlIuV3lhbnQgSUlJLCBWaW0gNi4xKQoKOC4xNCBTbG93IHN0YXJ0IGluIGNvbnNvbGUgbW9kZSBpc3N1ZQoKQXMgR1VJL0dUSyBWaW0gd29ya3MgZXF1YWxseSB3ZWxsIGluIGNvbnNvbGUgbW9kZSwgbWFueSBhZG1pbmlzdHJhdG9ycwpkZXBsb3kgdGhvc2UgZXhlY3V0YWJsZXMgc3lzdGVtIHdpZGUuClVuZm9ydHVuYXRlbHksIG9uIGEgcmVtb3RlIHNsb3cgY29ubmVjdGlvbnMgR1VJL0dUSyBleGVjdXRhYmxlcyBiZWhhdmUgcmF0aGVyCnNsb3cgd2hlbiB1c2VyIHdhbnRzIHRvIHJ1biBWaW0ganVzdCBpbiB0aGUgY29uc29sZSBtb2RlIC0gYmVjYXVzZSBvZiBYIGVudmlyb25tZW50IGRldGVjdGlvbiB0aW1lb3V0LgoKTHVja2lseSwgdGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24gZm9yIHRoYXQuIEFkbWluaXN0cmF0b3JzIG5lZWQgdG8gZGVwbG95CmJvdGggR1VJL0dUSyBidWlsZCBhbmQganVzdCBjb25zb2xlIGJ1aWxkIGV4ZWN1dGFibGVzLCBsaWtlIGJlbG93OiA+CgogICAgfC0gdmltNzMKICAgIHwtLS0tLSBkb2MKICAgIHwtLS0tLSBzeW50YXggICAgICAgIAogICAgICAgdmltcmMgICAgKHN5c3RlbSByYyBmaWxlcykKICAgICAgIGd2aW1yYwogICAgICAgZ3ZpbS5leGUgKHRoZSByZW5hbWVkIEdVSSBvciBHVEsgYnVpbHQgdmltLmV4ZSkgICAgICAKICAgICAgIHZpbS5leGUgICh0aGUgY29uc29sZSBvbmx5IGV4ZWN1dGFibGUpIAoKRGVmaW5lIHN5c3RlbSBzeW1ib2xzIGxpa2UgYmVsb3cgaW4gZm9yIGV4IGluIExPR0lOLkNPTSBvciBTWUxPR0lOLkNPTTogPgoKCSQgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLlZJTTczXSAhIHdoZXJlIHlvdSBWSU0gZGlyZWN0b3J5IGlzCgkkIHZpKm0gIDo9PSBtY3IgVklNOlZJTS5FWEUKCSQgZ3ZpKm0gOj09IG1jciBWSU06R1ZJTS5FWEUKCSQgISBvciB5b3UgY2FuIHRyeSB0byBzcGF3biB3aXRoCgkkIGd2KmltIDo9PSBzcGF3bi9ub3dhaXQvaW5wdXQ9TkxBMCBtY3IgVklNOkdWSU0uRVhFIC1nIC1HRU9NRVRSWSA4MHg0MAoKCkxpa2UgdGhpcywgdXNlcnMgdGhhdCBkbyBub3QgaGF2ZSBYIGVudmlyb25tZW50IGFuZCB3YW50IHRvIHVzZSBWaW0ganVzdCBpbiAKY29uc29sZSBtb2RlIGNhbiBhdm9pZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KCihab2x0YW4gQXJwYWRmZnksIFZpbSA3LjIpCgo4LjE1IENvbW1vbiBWSU0gZGlyZWN0b3J5IC0gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMKCkluIGEgY2x1c3RlciB0aGF0IGNvbnRhaW5zIG5vZGVzIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgbGlrZSBiZWxvdzoKCiRzaG93IGNsdXN0ZXIKVmlldyBvZiBDbHVzdGVyIGZyb20gc3lzdGVtIElEIDExNjU1ICBub2RlOiBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOC1BVUctMjAwOCAxMTo1ODozMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwqmICAgICAgICBTWVNURU1TICAgICAgICCmIE1FTUJFUlMgpgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tpgqmICBOT0RFICCmICAgU09GVFdBUkUgICCmICBTVEFUVVMgpgorLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tpgqmIFRPUiAgICCmIFZNUyBWNy4zLTIgICCmIE1FTUJFUiAgpgqmIFRJVEFOMiCmIFZNUyBWOC4zICAgICCmIE1FTUJFUiAgpgqmIE9ESU4gICCmIFZNUyBWNy4zLTIgICCmIE1FTUJFUiAgpgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKSXQgaXMgY29udmVuaWVudCB0byBoYXZlIGEgY29tbW9uIFZJTSBkaXJlY3RvcnkgYnV0IGV4ZWN1dGUgZGlmZmVyZW50CmV4ZWN1dGFibGVzLiAKVGhlcmUgYXJlIG1vcmUgc29sdXRpb25zIGZvciB0aGlzIHByb2JsZW06CgpTb2x1dGlvbiAxLiAgQWxsIGV4ZWN1dGFibGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3aXRoIGRpZmZlcmVudCBuYW1lcwpUaGlzIGlzIGVhc2lseSBkb25lIHdpdGggdGhlIGZvbGxvd2luZyBzY3JpcHQgdGhhdCBjYW4gYmUgYWRkZWQKdG8gdGhlIGxvZ2luLmNvbSBvciBzeWxvZ2luLmNvbTogPgoKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIlZBWCIKCSQgdGhlbgoJJCAgICAgICBzYXkgIlZBWCBwbGF0Zm9ybSIKCSQgICAgICAgdmkqbTo9PSBtY3IgdmltOlZJTS5FWEVfVkFYCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJOT0RFX0hXVFlQRSIpIC5lcXMuICJBTFBIIgoJJCB0aGVuCgkkICAgICAgIHNheSAiQUxQSEEgcGxhdGZvcm0iCgkkICAgICAgIHZpKm0gOj09IG1jciB2aW06VklNLkVYRV9BWFAKCSQgZW5kaWYKCSQgaWYgZiRnZXRzeWkoIkFSQ0hfTkFNRSIpIC5lcXMuICJJQTY0IgoJJCB0aGVuCgkkICAgICAgc2F5ICJJQTY0IHBsYXRmb3JtIgoJJCAgICAgIHZpKm0gOj09IG1jciB2aW06VklNLkVYRV9JQTY0CgkkIGVuZGlmCgpTb2x1dGlvbiAyLiAgRGlmZmVyZW50IGRpcmVjdG9yaWVzOiA+CgoJJCBpZiBmJGdldHN5aSgiTk9ERV9IV1RZUEUiKSAuZXFzLiAiVkFYIgoJJCB0aGVuCgkkICAgICAgIHNheSAiVkFYIHBsYXRmb3JtIgoJJCAgICAgICBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuVkFYX0VYRV0gISBWQVggZXhlY3V0YWJsZXMKCSQgZW5kaWYKCSQgaWYgZiRnZXRzeWkoIk5PREVfSFdUWVBFIikgLmVxcy4gIkFMUEgiCgkkIHRoZW4KCSQgICAgICAgc2F5ICJBTFBIQSBwbGF0Zm9ybSIKCSQgICAgICAgZGVmaW5lL25vbG9nIFZJTSBSRjEwOltVVElMLkFYUF9FWEVdICEgQVhQIGV4ZWN1dGFibGVzCgkkIGVuZGlmCgkkIGlmIGYkZ2V0c3lpKCJBUkNIX05BTUUiKSAuZXFzLiAiSUE2NCIKCSQgdGhlbgoJJCAgICAgIHNheSAiSUE2NCBwbGF0Zm9ybSIKCSQgICAgICBkZWZpbmUvbm9sb2cgVklNIFJGMTA6W1VUSUwuSUE2NF9FWEVdICEgSUE2NCBleGVjdXRhYmxlcwoJJCBlbmRpZgogICAgICAgICQhIFZJTVJVTlRJTUUgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGZpbmQgcnVudGltZSBmaWxlcwoJJCBkZWZpbmUvbm9sb2cgVklNUlVOVElNRSBSRjEwOltVVElMLlZJTTczXQoKQSBnb29kIGV4YW1wbGUgZm9yIHRoaXMgYXBwcm9hY2ggaXMgdGhlIFtHTlVdZ251X3Rvb2xzLmNvbSBzY3JpcHQgZnJvbQpHTlVfVE9PTFMuWklQIHBhY2thZ2UgZG93bmxvYWRhYmxlIGZyb20gaHR0cDovL3d3dy5wb2xhcmhvbWUuY29tL3ZpbS8KCihab2x0YW4gQXJwYWRmZnksIFZpbSA3LjIpCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjkuIFZNUyByZWxhdGVkIGNoYW5nZXMJCQkJCSp2bXMtY2hhbmdlcyoKClZlcnNpb24gNy4zCi0gQ1RBR1MgNS44IGluY2x1ZGVkCi0gVk1TIGNvbXBpbGUgd2FybmluZ3MgZml4ZWQgLSBmbG9hdGluZy1wb2ludCBvdmVyZmxvdyB3YXJuaW5nIGNvcnJlY3RlZCBvbiBWQVgKLSBmaWxlcGF0aCBjb21wbGV0aXRpb24gY29ycmVjdGVkIC0gdG9vIG1hbnkgY2hhcnMgd2VyZSBlc2NhcGVkIGluIGZpbGVuYW1lCiAgYW5kIHNoZWxsIGNvbW1hbmRzCi0gdGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBpbmNsdWRlZCBpbnRvIFZNUyBydW50aW1lOgoJZ2VudXRpbHMgMi40LCBtdWx0aXNlbGVjdCAyLjIsIG11bHR2YWxzIDMuMSwgc2VsZWN0YnVmIDQuMywKCWJ1ZmV4cGxvcmVyIDcuMS43LCB0YWdsaXN0IDQuNQotIG1pbm9yIGNoYW5nZXMgaW4gdmltcmMgKGp1c3QgaW4gVk1TIHJ1bnRpbWUpCi0gbWFrZV92bXMubW1zIC0gSFVHRSBtb2RlbCBpcyB0aGUgZGVmYXVsdAotIFtURVNURElSXW1ha2Vfdm1zLm1tcyBpbmNsdWRlIGFzIG1hbnkgdGVzdHMgcG9zc2libGUKLSBtb2RpZnkgdGVzdDMwIGFuZCB0ZXN0NTQgZm9yIFZNUwotIGVuYWJsZSBGTE9BVCBmZWF0dXJlIGluIFZNUyBwb3J0Ci0gb3Nfdm1zLnR4dCB1cGRhdGVkCgpWZXJzaW9uIDcuMiAoMjAwOCBBdWcgOSkKLSBWQ0YgZmlsZXMgd3JpdGUgY29ycmVjdGVkCi0gQ1RBR1MgNS43IGluY2x1ZGVkCi0gY29ycmVjdGVkIG1ha2Vfdm1zLm1tcyAob24gVkFYIGdhdmUgc3ludGF4IGVycm9yKSAKClZlcnNpb24gNy4xICgyMDA3IEp1biAxNSkKLSBjcmVhdGUgVEFHUyBmaWxlIGZyb20gbWVudSAKClZlcnNpb24gNyAoMjAwNiBNYXkgOCkKLSBJbXByb3ZlZCBsb3cgbGV2ZWwgY2hhciBpbnB1dCAoYWZmZWN0cyBqdXN0IGNvbnNvbGUgbW9kZSkKLSBGaXhlZCBwbHVnaW4gYnVnCi0gQ1RBR1MgNS42IGluY2x1ZGVkCgpWZXJzaW9uIDYuNCAoMjAwNSBPY3QgMTUpCi0gR1RLTElCIGFuZCBWaW0gYnVpbGQgb24gSUE2NAotIGNvbG9ycyBpbiB0ZXJtaW5hbCBtb2RlCi0gc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0ZXJtaW5hbCBtb2RlCi0gd3JpdGUgcHJvYmxlbSBmaXhlZCAoZXh0cmEgQ1IpCi0gRVNDIGFuZCBFU0Mgc2VxdWVuY2UgcmVjb2duaXRpb24gaW4gdGVybWluYWwgbW9kZQotIG1ha2UgZmlsZSBjaGFuZ2VkIHRvIHN1cHBvcnQgbmV3IE1NUyB2ZXJzaW9uCi0gZW52IHZhcmlhYmxlIGV4cGFuc2lvbiBpbiBwYXRoIGNvcnJlY3RlZAotIHByaW50aW5nIHByb2JsZW1zIGNvcnJlY3RlZAotIGhlbHAgdGV4dCBhZGRlZCBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBhcmd1bWVudHMKClZlcnNpb24gNi4zICgyMDA0IE1heSAxMCkKLSBJbXByb3ZlZCB2bXNfcmVhZCBmdW5jdGlvbgotIENUQUdTIHY1LjUuNCBpbmNsdWRlZAotIERvY3VtZW50YXRpb24gY29ycmVjdGVkIGFuZCB1cGRhdGVkCgpWZXJzaW9uIDYuMiAoMjAwMyBNYXkgNykKLSBDb3JyZWN0ZWQgVk1TIHN5c3RlbSBjYWxsIHJlc3VsdHMKLSBMb3cgbGV2ZWwgY2hhcmFjdGVyIGlucHV0IGlzIHJld3JpdHRlbgotIENvcnJlY3Rpb24gaW4gdGFnIGFuZCBxdWlja2ZpeCBoYW5kbGluZwotIEZpcnN0IEdUSyBidWlsZAotIE1ha2UgZmlsZSBjaGFuZ2VzCiAgICAtIEdUSyBmZWF0dXJlIGFkZGVkCiAgICAtIERlZmluZSBmb3IgT0xEX1ZNUwogICAgLSBPcGVuVk1TIHZlcnNpb24gNi4yIG9yIG9sZGVyCi0gRG9jdW1lbnRhdGlvbiB1cGRhdGVkIHdpdGggR1RLIGZlYXR1cmVzCi0gQ1RBR1MgdjUuNSBpbmNsdWRlZAotIFZNUyBWSU0gdHV0b3IgY3JlYXRlZAoKVmVyc2lvbiA2LjEgKDIwMDIgTWFyIDI1KQotIFRDTCBpbml0X3RjbCgpIHByb2JsZW0gZml4ZWQKLSBDVEFHUyB2NS40IGluY2x1ZGVkCi0gR05VIHRvb2xzIGJpbmFyaWVzIGZvciBPcGVuVk1TCi0gTWFrZSBmaWxlIGNoYW5nZXMKICAgIC0gUEVSTCwgUFlUSE9OIGFuZCBUQ0wgc3VwcG9ydCBpbXByb3ZlZAogICAgLSBJbnN0YWxsVk1TLnR4dCBoYXMgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBIT1dUTyBidWlsZAotIFZNUy9Vbml4IGZpbGUgaGFuZGxpbmcgcmV3cml0dGVuCi0gTWlub3IgY2FzdGluZyBhbmQgYnVnIGZpeGVzCgpWZXJzaW9uIDYuMCAoMjAwMSBTZXAgMjgpCi0gVW5peCBhbmQgVk1TIGNvZGUgaGFzIGJlZW4gbWVyZ2VkCgktIHNlcGFyYXRlZCAicmVhbGx5IiBWTVMgcmVsYXRlZCBjb2RlCgktIGluY2x1ZGVkIGFsbCBwb3NzaWJsZSBVbml4IGZ1bmN0aW9uYWxpdHkKCS0gc2ltcGxpZmllZCBvciBkZWxldGVkIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCgktIG1ha2VmaWxlIE1BS0VfVk1TLk1NUyByZXZpZXdlZAotIG1lbnUgY2hhbmdlcyAoZml4ZWQgcHJpbnRpbmcsIENUQUdTIGFuZCBYWEQgdXNhZ2UpCi0gZml4ZWQgdmFyaWFibGUgUk1TIHJlY29yZCBmb3JtYXQgaGFuZGxpbmcgYW5vbWFseQotIGNvcnJlY3RlZCBzeW50YXgsIGZ0cGx1Z2luIGV0YyBmaWxlcyBsb2FkCi0gY2hhbmdlZCBleHBhbmRfd2lsZGNhcmRzIGFuZCBleHBhbmRwYXRoIGZ1bmN0aW9ucyB0byB3b3JrIG1vcmUgZ2VuZXJhbAotIGNyZWF0ZWQgT1NfVk1TX0ZJTFRFUi5DT00gLSBERUNDLT5WQVhDIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlIGNvbnZlcnQKICBzY3JpcHQuCi0gSW1wcm92ZWQgY29kZSdzIFZBWEMgYW5kIG5ldyBERUNDIGNvbXBpbGVycyBjb21wYXRpYmlsaXR5Ci0gY2hhbmdlZCBxdWlja2ZpeCBwYXJhbWV0ZXJzOgoJLSBlcnJvcm1lc3NhZ2UgZm9ybWF0IHRvIHN1aXRlIERFQ0MKCS0gc2VhcmNoLCBtYWtlIGFuZCBvdGhlciBjb21tYW5kcyB0byBzdWl0ZSBWTVMgc3lzdGVtCi0gdXBkYXRlZCBhbmQgcmVuYW1lZCBNTVMgbWFrZSBmaWxlcyBmb3IgVmltIGFuZCBDVEFHUy4KLSBDVEFHUyBoYXMgYmVlbiByZW1vdmVkIGZyb20gc291cmNlIGRpc3RyaWJ1dGlvbiBvZiBWaW0gYnV0IGl0IHdpbGwgcmVtYWluCiAgaW4gT3BlblZNUyBiaW5hcnkgZGlzdHJpYnV0aW9ucy4KLSBzaW1wbGlmaWVkIGJ1aWxkL2NvbmZpZ3VyYXRpb24gcHJvY2VkdXJlCi0gY3JlYXRlZCBJTlNUQUxMdm1zLnR4dCAtIGRldGFpbGVkIGNvbXBpbGluZyBpbnN0cnVjdGlvbnMgdW5kZXIgVk1TLgotIHVwZGF0ZWQgdGVzdCBzY3JpcHRzLgoKVmVyc2lvbiA1LjggKDIwMDEgSnVuIDEpCi0gT1NfVk1TLlRYVCB1cGRhdGVkIHdpdGggbmV3IGZlYXR1cmVzLgotIG90aGVyIG1pbm9yIGZpeGVzLgotIGRvY3VtZW50YXRpb24gdXBkYXRlZAotIHRoaXMgdmVyc2lvbiBoYWQgYmVlbiB0ZXN0ZWQgbXVjaCBtb3JlIHRoYW4gYW55IG90aGVyIE9wZW5WTVMgdmVyc2lvbgogIGVhcmxpZXIKClZlcnNpb24gNS43ICgyMDAwIEp1biAyNCkKLSBOZXcgQ1RBR1MgdjUuMCBpbiBkaXN0cmlidXRpb24KLSBEb2N1bWVudGF0aW9uIHVwZGF0ZWQKClZlcnNpb24gNS42ICgyMDAwIEphbiAxNykKLSBWTVMgZmlsZW5hbWUgcmVsYXRlZCBjaGFuZ2VzOgoJLSB2ZXJzaW9uIGhhbmRsaW5nIChvcGVuIGV2ZXJ5dGhpbmcsIHNhdmUgdG8gbmV3IHZlcnNpb24pCgktIGNvcnJlY3QgZmlsZSBleHRlbnNpb24gbWF0Y2hpbmcgZm9yIHN5bnRheCAodmVyc2lvbiBwcm9ibGVtKQoJLSBoYW5kbGUgPCw+IGNoYXJhY3RlcnMgYW5kIHBhc3N3b3JkcyBpbiBkaXJlY3RvcnkgZGVmaW5pdGlvbgoJLSBoYW5kbGUgaW50ZXJub2RlL3JlbW90ZSBpbnZvY2F0aW9uIGFuZCBlZGl0aW5nIHdpdGggcGFzc3dvcmRzCgktIE9wZW5WTVMgZmlsZXMgd2lsbCBiZSB0cmVhdGVkIGNhc2UgaW5zZW5zaXRpdmUgZnJvbSBub3cKCS0gY29ycmVjdGVkIHJlc3BvbnNlIG9mIGV4cGFuZCgiJTouIikgZXRjIHBhdGggcmVsYXRlZCBmdW5jdGlvbnMKCShpbiBvbmUgd29yZDogVk1TIGRpcmVjdG9yeSBoYW5kbGluZyBpbnRlcm5hbGx5KQotIHZlcnNpb24gY29tbWFuZAoJLSBjb3JyZWN0ZWQgKCssLSkgaW5mb3JtYXRpb24gZGF0YQoJLSBhZGRlZCBjb21waWxlciBhbmQgT1MgdmVyc2lvbgoJLSBhZGRlZCB1c2VyIGFuZCBob3N0IGluZm9ybWF0aW9uCgktIHJlc29sdmluZyAkVklNIGFuZCAkVklNUlVOVElNRSBsb2dpY2FscwotIFZNUyBwb3J0IGlzIGluIE1BWF9GRUFUIChtYXhpbXVtIGZlYXR1cmVzKSBjbHViIHdpdGggVW5peCwgV2luMzIgYW5kIE9TLzIuCgktIGVuYWJsZWQgZmFyc2ksIHJpZ2h0bGVmdCBldGMuIGZlYXR1cmVzCgktIHVuZG8gbGV2ZWwgcmFpc2VkIHVwIHRvIDEwMDAKLSBVcGRhdGVkIE9TX1ZNUy5NTVMgZmlsZS4KCS0gbWF4aW11bSBmZWF0dXJlcyBPTiBpcyBkZWZhdWx0CgktIFZpbSBpcyBjb21waWxhYmxlIHdpdGggK3BlcmwsICtweXRob24gYW5kICt0Y2wgZmVhdHVyZXMuCgktIGltcHJvdmVkIE1NSyBjb21wYXRpYmlsaXR5Ci0gQ3JlYXRlZCBNQUtFRklMRV9WTVMuTU1TLCBtYWtlZmlsZSBmb3IgdGVzdGluZyBWaW0gZHVyaW5nIGRldmVsb3BtZW50LgotIERlZmluZWQgREVDIHRlcm1pbmFsIFZUMzIwCgktIGNvbXBhdGliaWxpdHkgZm9yIFZUMyowLCBWVDIqMCBhbmQgVlQxKjAgLSBBTlNJIHRlcm1pbmFscwoJICBiYWNrd2FyZHMsIGJ1dCBub3QgVlQzNDAgYW5kIG5ld2VyIHdpdGggY29sb3VyIGNhcGFiaWxpdHkuCgktIFZUMzIwIGlzIGRlZmF1bHQgdGVybWluYWwgZm9yIE9wZW5WTVMKCS0gdGhlc2UgbmV3IHRlcm1pbmFscyBhcmUgYWxzbyBmYXN0IHR0eXMgKGRlZmF1bHQgZm9yIE9wZW5WTVMpLgoJLSBhbGxvd2VkIGRlY19tb3VzZSB0dHltCi0gVXBkYXRlZCBmaWxlcyB2aW1yYyBhbmQgZ3ZpbXJjIHdpdGggVk1TIHNwZWNpZmljIHN1Z2dlc3Rpb25zLgotIE9TX1ZNUy5UWFQgdXBkYXRlZCB3aXRoIG5ldyBmZWF0dXJlcy4KClZlcnNpb24gNS41ICgxOTk5IERlYyAzKQotIFBvcHVwIG1lbnUgbGluZSBjcmFzaCBjb3JyZWN0ZWQuCi0gSGFuZGxlIGZ1bGwgZmlsZSBuYW1lcyB3aXRoIHZlcnNpb24gbnVtYmVycy4KLSBEaXJlY3RvcnkgaGFuZGxpbmcgKENEIGNvbW1hbmQgZXRjLikKLSBDb3JyZWN0ZWQgZmlsZSBuYW1lIGNvbnZlcnNpb24gVk1TIHRvIFVuaXggYW5kIHYudi4KLSBDb3JyZWN0IHJlc3BvbnNlIG9mIGV4cGFuZCB3aWxkY2FyZHMKLSBSZWNvdmVyeSBpcyB3b3JraW5nIGZyb20gdGhpcyB2ZXJzaW9uIHVuZGVyIFZNUyBhcyB3ZWxsLgotIEltcHJvdmVkIHRlcm1pbmFsIGFuZCBzaWduYWwgaGFuZGluZy4KLSBJbXByb3ZlZCBPU19WTVMuVFhUCgpWZXJzaW9uIDUuNCAoMTk5OSBTZXAgOSkKLSBDdXQgYW5kIHBhc3RlIG1pc21hdGNoIGNvcnJlY3RlZC4KLSBNb3RpZiBkaXJlY3RvcmllcyBkdXJpbmcgb3BlbiBhbmQgc2F2ZSBhcmUgY29ycmVjdGVkLgoKVmVyc2lvbiA1LjMgKDE5OTggT2N0IDEyKQotIE1pbm9yIGNoYW5nZXMgaW4gdGhlIGNvZGUKLSBTdGFuZGFyZCBkaXN0cmlidXRpb24gd2l0aCArR1VJIG9wdGlvbgoKVmVyc2lvbiA1LjEgKDE5OTggQXByIDIxKQotIFN5bnRheCBhbmQgREVDIEMgY2hhbmdlcyBpbiB0aGUgY29kZQotIEZpeGluZyBwcm9ibGVtcyB3aXRoIHRoZSAvZG9jIHN1YmRpcmVjdG9yeQotIEltcHJvdmUgT1NfVk1TLk1NUwoKVmVyc2lvbiA0LjUgKDE5OTYgRGVjIDE2KQotIEZpcnN0IFZNUyBwb3J0IGJ5IEhlbmsgRWxiZXJzIDxoZW5rQHhzNGFsbC5ubD4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMTAuIEF1dGhvcnMJCQkJCQkqdm1zLWF1dGhvcnMqCgpPcGVuVk1TIGRvY3VtZW50YXRpb24gYW5kIGV4ZWN1dGFibGVzIGFyZSBtYWludGFpbmVkIGJ5Ogpab2x0YW4gQXJwYWRmZnkgPGFycGFkZmZ5QHBvbGFyaG9tZS5jb20+Ck9wZW5WTVMgVmltIHBhZ2U6IGh0dHA6Ly93d3cucG9sYXJob21lLmNvbS92aW0vCgpUaGlzIGRvY3VtZW50IHVzZXMgcGFydHMgYW5kIHJlbWFya3MgZnJvbSBlYXJsaWVyIGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycwpvZiBPU19WTVMuVFhUOgoJQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIDxjZWNAZ3J5cGhvbi5nc2ZjLm5hc2EuZ292PgoJQnJ1Y2UgSHVuc2FrZXIgPEJOSHVuc2FrZXJAY2hxLmJ5dS5lZHU+CglTYW5kb3IgS29wYW55aSA8c2FuZG9yLmtvcGFueWlAbWFpbGJveC5odT4KCiB2aW06dHc9Nzg6dHM9ODpmdD1oZWxwOm5vcmw6Cg==