PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgiX3Byb2plY3RDb21tb24ucGhwIik7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCgojCiMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuCiRwYWdlVGl0bGUgCQk9ICJFY2xpcHNlIFJlbGVhc2VzIEl0cyBGaXJzdCBVc2VyLUNlbnRyaWMgSWRlbnRpdHkgRnJhbWV3b3JrIjsKJHBhZ2VLZXl3b3Jkcwk9ICJlY2xpcHNlLCBoaWdnaW5zLCBwcmVzcywgcmVsZWFzZSwgdXNlciwgY2VudHJpYyI7CiRwYWdlQXV0aG9yCQk9ICJJYW4gU2tlcnJldHQiOwoKIyBBZGQgcGFnZS1zcGVjaWZpYyBOYXYgYmFycyBoZXJlCiMgRm9ybWF0IGlzIExpbmsgdGV4dCwgbGluayBVUkwgKGNhbiBiZSBodHRwOi8vd3d3LnNvbWVvdGhlcnNpdGUuY29tLyksIHRhcmdldCAoX3NlbGYsIF9ibGFuaykKIyAkTmF2LT5hZGRDdXN0b21OYXYoIk15IExpbmsiLCAibXlwYWdlLnBocCIsICJfc2VsZiIpOwojICROYXYtPmFkZEN1c3RvbU5hdigiR29vZ2xlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCAiX2JsYW5rIik7CgojIEVuZDogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncwojCgojIFBhc3RlIHlvdXIgSFRNTCBjb250ZW50IGJldHdlZW4gdGhlIEVPSFRNTCBtYXJrZXJzIQokaHRtbCA9IDw8PEVPSFRNTAoJCTxzdHlsZT4KCQkucGFkZGVkbGlzdCBsaSB7CXBhZGRpbmctYm90dG9tOjdweDsJfQoJPC9zdHlsZT4KPGRpdiBpZD0ibWFpbmNvbnRlbnQiPgoJPGRpdiBpZD0ibWlkY29sdW1uIj4KCQk8aDI+UHJlc3MgUmVsZWFzZTwvaDI+CgkJPGNlbnRlcj4KCQk8aDE+JHBhZ2VUaXRsZTwvaDE+CgkJPHA+PGk+RWNsaXBzZSBIaWdnaW5zIDEuMCBpcyBub3cgYXZhaWxhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB1c2VycyB0byBtYW5hZ2UgYW5kIHVzZSB0aGVpciBvbi1saW5lIGlkZW50aXR5PC9pPjwvcD48L2NlbnRlcj4KCQk8cD48c3Ryb25nPk9UVEFXQSAtIEZlYnJ1YXJ5IDIxLCAyMDA4ICAtIDwvc3Ryb25nPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG9kYXkgYW5ub3VuY2VkIHRoZSBhdmFpbGFiaWxpdHkgb2YgRWNsaXBzZSBIaWdnaW5zIDEuMCwgYSBmcmVlbHkgZG93bmxvYWRhYmxlIGlkZW50aXR5IGZyYW1ld29yayBkZXNpZ25lZCB0byBpbnRlZ3JhdGUgaWRlbnRpdHksIHByb2ZpbGUgYW5kIHNvY2lhbCByZWxhdGlvbnNoaXAgaW5mb3JtYXRpb24gYWNyb3NzIG11bHRpcGxlIHNpdGVzLCBhcHBsaWNhdGlvbnMgYW5kIGRldmljZXMgdXNpbmcgYW4gZXh0ZW5zaWJsZSBzZXQgb2YgY29tcG9uZW50cy48L3A+CgkJPHA+V2ViIDIuMCwgbWFzaHVwcywgc29jaWFsIG5ldHdvcmtpbmcgYW5kIHRoZSBnZW5lcmFsIHJpc2Ugb2YgbmV0d29ya2VkIGFwcGxpY2F0aW9ucyBoYXZlIG1hZGUgV2ViLWJhc2VkIGlkZW50aXR5IG1hbmFnZW1lbnQgY29tcGxleCBmb3IgYm90aCB0aGUgZW5kLXVzZXIgYW5kIHRoZSBkZXZlbG9wZXIuIFRoZSBFY2xpcHNlIEhpZ2dpbnMgcHJvamVjdCwgYSBjb2FsaXRpb24gb2Ygb3JnYW5pemF0aW9ucyBhbmQgaW5kaXZpZHVhbHMsIGhhcyBiZWVuIHdvcmtpbmcgdG8gYWRkcmVzcyB0aGVzZSBpc3N1ZXMuICA8L3A+CgkJPHA+TXVsdGlwbGUgaWRlbnRpdHkgcHJvdG9jb2xzIGhhdmUgYmVlbiBkZXZlbG9wZWQgdG8gYWRkcmVzcyBkaWZmZXJlbnQgbmVlZHMsIGluY2x1ZGluZyBXUy1UcnVzdCwgT3BlbklELCBTQU1MLCBYREkgYW5kIExEQVAuIFRoaXMgcmVxdWlyZXMgc29mdHdhcmUgZGV2ZWxvcGVycyB0byBzdXBwb3J0IG11bHRpcGxlIHByb3RvY29scywgcmVzdWx0aW5nIGluIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgaW4gbWFuYWdpbmcgaWRlbnRpdGllcy4gQWRkaXRpb25hbGx5LCBpbmRpdmlkdWFscyBhcmUgcGFydGljdWxhciBhYm91dCB3aGljaCBlbnRpdGllcyB0aGV5IHNoYXJlIHdoYXQgcGVyc29uYWwgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBvbmUgbWlnaHQgbm90IHByZWZlciB0byBzaGFyZSBjcmVkaXQgY2FyZCBpbmZvcm1hdGlvbiBvbiBhIHNvY2lhbCBuZXR3b3JraW5nIHNpdGUgYXMgcmVhZGlseSBhcyB3aXRoIGEgbGVhZGluZyBvbi1saW5lIHJldGFpbGVyLjwvcD4KCQk8cD5UbyBhZGRyZXNzIHRoZXNlIGNoYWxsZW5nZXMsIEhpZ2dpbnMgcHJvdmlkZXMgYSBzb2Z0d2FyZSBmcmFtZXdvcmsgdGhhdCBkZWxpdmVycyB0aHJlZSB0ZWNobm9sb2dpZXM6PC9wPgoJCTxwPkZpcnN0LCBpdCBwcm92aWRlcyBtdWx0aS1wbGF0Zm9ybSCTaWRlbnRpdHkgc2VsZWN0b3KUIGFwcGxpY2F0aW9ucyB0aGF0IGVuZC11c2VycyBjYW4gdXNlIHRvIHNpZ24taW4gdG8gd2ViIHNpdGVzIGFuZCBzeXN0ZW1zIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgZW1lcmdpbmcgdXNlci1jZW50cmljIJNJbmZvcm1hdGlvbiBDYXJklC1iYXNlZCAob3Igk2ktY2FyZJQtYmFzZWQpIGFwcHJvYWNoIHRvIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGFwcHJvYWNoIHByb21pc2VzIHBlb3BsZSBmZXdlciBwYXNzd29yZHMsIG1vcmUgY29udmVuaWVuY2UsIGFuZCBiZXR0ZXIgc2VjdXJpdHkuIEFuIEluZm9ybWF0aW9uIENhcmQgaXMgYSBuZXcsIGdyYXBoaWNhbCB3YXkgdG8gcmVmZXIgdG8gYSBjb2xsZWN0aW9uIG9mIGlkZW50aXR5IGluZm9ybWF0aW9uIHRoYXQgeW91IG1pZ2h0IHdpc2ggdG8gc2VuZCB0byBhIHdlYnNpdGUgb3IgcHJvZ3JhbS48L3A+CgkJPHA+U2Vjb25kLCBpdCBwcm92aWRlcyCTaWRlbnRpdHkgcHJvdmlkZXKUIHdlYiBzZXJ2aWNlcyB0aGF0IGNhbiBpc3N1ZSBpLWNhcmRzIGFzIHdlbGwgYXMgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB3ZWIgc2l0ZXMgYW5kIGFwcGxpY2F0aW9ucyB0byBhY2NlcHQgaS1jYXJkcy4gIFNvZnR3YXJlIGRldmVsb3BlcnMgY2FuIGluY29ycG9yYXRlIHRoaXMgY29kZSBpbnRvIHRoZWlyIGFwcGxpY2F0aW9ucyB0byBtYWtlIGl0IGVhc2llciBmb3IgdGhlaXIgdXNlcnMgdG8gbG9nLWluIHRvIHRoZWlyIHNpdGVzLjwvcD4KCQk8cD5UaGlyZCwgaXQgaW1wbGVtZW50cyB0aGUgSGlnZ2lucyBHbG9iYWwgR3JhcGggKEhHRykgZGF0YSBtb2RlbCBhbmQgdGhlIEhpZ2dpbnMgSWRlbnRpdHkgQXR0cmlidXRlIFNlcnZpY2UgKElkQVMpLiBEZXZlbG9wZXJzIG5vdyBoYXZlIGEgZnJhbWV3b3JrIHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJvcGVyYWJpbGl0eSBhbmQgcG9ydGFiaWxpdHkgYWJzdHJhY3Rpb24gbGF5ZXIgb3ZlciBleGlzdGluZyCTc2lsb3OUIG9mIGlkZW50aXR5IGRhdGEuIEZvciB0aGUgZmlyc3QgdGltZSwgSWRBUyBtYWtlcyBpdCBwb3NzaWJsZSB0byCTbWFzaC11cJQgaWRlbnRpdHkgYW5kIHNvY2lhbCBuZXR3b3JrIGRhdGEgYWNyb3NzIGhpZ2hseSBoZXRlcm9nZW5lb3VzIGRhdGEgc291cmNlcyBpbmNsdWRpbmcgZGlyZWN0b3JpZXMsIHJlbGF0aW9uYWwgZGF0YWJhc2VzLCBhbmQgc29jaWFsIG5ldHdvcmtzLiBUZWNobm9sb2d5IGJ1aWx0IG9uIHRoaXMgZnJhbWV3b3JrIGNvdWxkIGFsbG93IHVzZXJzIHRvIGxvZ2luIHRvIHRoZWlyIGJhbmsgYWNjb3VudCB3aXRoIGEgc2VjdXJlIGF1dGhvcml6YXRpb24ga2V5LCB3aGljaCB3b3VsZCBiZSBhdXRvbWF0aWNhbGx5IGZyZXNobHkgZ2VuZXJhdGVkIGZvciBlYWNoIHZpc2l0LiBVc2VycyB3b3VsZG6SdCBuZWVkIHRvIHJlbWVtYmVyIG9yIHdyaXRlIGRvd24gcGFzc3dvcmRzLCB3aGljaCBjYW4gYWxzbyBiZSBsb25nIGFuZCBjb21wbGV4IGVub3VnaCB0byBiZSBzZWN1cmUuIEFkZGl0aW9uYWxseSwgdGhpcyBzYW1lIGludGVyZmFjZSBhbHNvIGNvdWxkIGFsbG93IHVzZXJzIHRvIHNpZ24gaW50byB0aGVpciBmYXZvcml0ZSB3aWtpIG9yIGJsb2cgd2l0aCBqdXN0IG9uZSBjbGljay4gPC9wPgoJCTxwPkhpZ2dpbnMgaXMgbm90IGFub3RoZXIgaWRlbnRpdHkgcHJvdG9jb2wgbGlrZSBPcGVuSUQsIFNBTUwsIG9yIFdTLVRydXN0OyBpdCBpcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBzb2Z0d2FyZSBkZXZlbG9wZXJzIHRvIGludGVncmF0ZSBhbmQgbGV2ZXJhZ2UgbXVsdGlwbGUgcHJvdG9jb2xzIHdpdGhpbiB0aGVpciBhcHBsaWNhdGlvbnMuIFNwZWNpZmljIGlkZW50aXR5IHByb3RvY29scywgbGlrZSBPcGVuSUQsIHdoaWNoIGlzIHZlcnkgaW1wb3J0YW50IGZvciBzb2x2aW5nIHBhc3N3b3JkIG1hbmFnZW1lbnQgZm9yIHRoaW5ncyBsaWtlIGJsb2csIHdpa2lzLCBldGMuLCBhcmUgcG9wdWxhciB3aXRoIHNwZWNpZmljIHVzZXJzIGZvciBzcGVjaWZpYyB1c2UgY2FzZXM7IGhvd2V2ZXIsIHRoZSBQcm9qZWN0IEhpZ2dpbnMgY29tbXVuaXR5IGJlbGlldmVzIHRoZXJlIHdpbGwgY29udGludWUgdG8gYmUgbXVsdGlwbGUgaWRlbnRpdHkgcHJvdG9jb2xzIHVzZWQgdG8gc3VwcG9ydCBkaWZmZXJpbmcgaWRlbnRpdHkgc2NlbmFyaW9zLiBJbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGRldmVsb3BlciB0byBiZWNvbWUgcHJvZmljaWVudCBpbiBhbGwgcHJvdG9jb2xzLCB0aGV5IGNhbiBub3cgdXNlIEhpZ2dpbnMgdG8gZ2FpbiBzdXBwb3J0IGZvciB0aGVtIGFsbC4gPC9wPgoJCTxwPldpdGggdGhpcyBpbml0aWFsIDEuMCByZWxlYXNlIG9mIEhpZ2dpbnMsIG1hbnkgb2YgdGhlIGxhcmdlc3QgcHJvdmlkZXJzIG9mIGlkZW50aXR5IG1hbmFnZW1lbnQgc29mdHdhcmUgcmVjb2duaXplIGl0cyBwb3RlbnRpYWwuIElCTSwgTWljcm9zb2Z0IGFuZCBOb3ZlbGwgYXJlIHNpZ25pZmljYW50IGNvbnRyaWJ1dG9ycyB0byB0aGUgcHJvamVjdC4gQWRkaXRpb25hbGx5LCBjb21wYW5pZXMgbGlrZSBTZXJlbmEgYXJlIGFscmVhZHkgdXNpbmcgSGlnZ2lucyBpbiB0aGVpciBjb21tZXJjaWFsIHByb2R1Y3RzLiBDb21wYW5pZXMgc3VjaCBhcyBPcmFjbGUgc3VwcG9ydCB0aGUgZ29hbHMgb2YgdGhlIHByb2plY3QuPC9wPgoJCTxwPiCTU2VyZW5hIHJlY29nbml6ZXMgdGhlIGltcG9ydGFuY2Ugb2YgSWRlbnRpdHkgYW5kIFNlY3VyaXR5IGFzIGtleSBjb21wb25lbnRzIG9mIGJ1c2luZXNzIG1hc2h1cHMuIFRoZSBTZXJlbmEgQnVzaW5lc3MgTWFzaHVwcyBwcm9kdWN0IGxldmVyYWdlcyB0aGUgRWNsaXBzZSBIaWdnaW5zIFNlY3VyaXR5IFRva2VuIFNlcnZlciAoU1RTKSB0byBwcm92aWRlIHRoZSBhZHZhbnRhZ2VzIG9mIHRva2VuLWJhc2VkIHNlY3VyaXR5IGZvciBTaW5nbGUgU2lnbi1PbiBhbmQgd2ViIHNlcnZpY2VzIHNlY3VyaXR5LiIgU2FpZCBCcmlhbiBDYXJyb2xsLCBTZXJlbmEgRmVsbG93LiAgPC9wPgoJCTxwPpNUaGlzIGlzIGEgbWFqb3IgbWlsZXN0b25lIGZvciB0aGUgcHJvamVjdCBhcyBvcGVuLXNvdXJjaW5nIHRoZSBIaWdnaW5zIHRlY2hub2xvZ3kgZW5zdXJlcyB0aGF0IHRoZXJlIHdpbGwgYmUgZWFzeSBhY2Nlc3MgdG8gaXQsIGFuZCB0aGF0IGRldmVsb3BlcnMgY2FuIGlubm92YXRlIGFyb3VuZCBpdC4gSXQgcHJvdmlkZXMgY3VzdG9tZXJzIHRoZSBvcHBvcnR1bml0eSB0byBhZG9wdCB1c2VyLWNlbnRyaWMgaWRlbnRpdHkgbWFuYWdlbWVudCBzeXN0ZW1zIHdpdGhvdXQgZ2V0dGluZyBsb2NrZWQgaW50byBhIHByb3ByaWV0YXJ5IGFyY2hpdGVjdHVyZSyUIHNhaWQgQW50aG9ueSBOYWRhbGluLCBJQk0gRGlzdGluZ3Vpc2hlZCBFbmdpbmVlciBhbmQgQ2hpZWYgU2VjdXJpdHkgQXJjaGl0ZWN0LiAgk1RoZSBwcm9qZWN0IGhlbHBzIGV4dGVuZCBJQk0ncyBpZGVudGl0eSBtYW5hZ2VtZW50IHBvcnRmb2xpbyBieSBwdXR0aW5nIHBlb3BsZSBpbiB0aGUgZHJpdmVyJ3Mgc2VhdCBvZiB0aGVpciBwZXJzb25hbCBpZGVudGl0eSBpbmZvcm1hdGlvbiB3aGlsZSBhbHNvIGdpdmluZyBjb21wYW5pZXMsIGdvdmVybm1lbnRzIGFuZCBzb2NpYWwgbmV0d29ya2luZyBvdXRsZXRzIG5ldyB3YXlzIHRvIGNvbGxhYm9yYXRlLiIgIDwvcD4KCQk8cD6TSW50ZXJvcGVyYWJsZSBpZGVudGl0eSBzZXJ2aWNlcyB0aGF0IGNhbiBicmlkZ2UgZW50ZXJwcmlzZSBzeXN0ZW1zIHRvIHJlYWRpbHktYXZhaWxhYmxlIGlkZW50aXR5IG1hbmFnZW1lbnQgc29mdHdhcmUgYXJlIGNyaXRpY2FsIHRvIGhlbHBpbmcgY29tcGFuaWVzIHNvbHZlIGdvdmVybmFuY2UsIHJpc2sgbWFuYWdlbWVudCBhbmQgY29tcGxpYW5jZSBjaGFsbGVuZ2VzLJQgc2FpZCBEYWxlIE9sZHMsIERpc3Rpbmd1aXNoZWQgRW5naW5lZXIgYW5kIEJhbmRpdCBQcm9qZWN0IExlYWRlciwgTm92ZWxsLiBFY2xpcHNlIEhpZ2dpbnMgMS4wIGlzIGEgc2lnbmlmaWNhbnQgbWlsZXN0b25lIGJlY2F1c2UgaXQgaW52b2x2ZXMgbm90IGp1c3Qgc3BlY2lmaWNhdGlvbnMsIGJ1dCBhIHNvZnR3YXJlIGZyYW1ld29yayBhbmQgd29ya2luZyBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgbm93IHRvIGludGVncmF0ZSBpZGVudGl0eSBzeXN0ZW1zLiBVc2luZyBhbiBvcGVuLCBjb2xsYWJvcmF0aXZlIGRldmVsb3BtZW50IHByb2Nlc3MgaGFzIGRlbW9uc3RyYXRlZCB0aGF0IHRoZSBmcmFtZXdvcmsgd29ya3Mgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RhbmRhcmQgcHJvdG9jb2xzLCB5ZXQgcHJvdmlkZXMgZGV2ZWxvcGVycyB3aXRoIGEgcHJvdG9jb2wgaW5kZXBlbmRlbnQgaW50ZXJmYWNlLpQ8L3A+CgkJPHA+k1RoZSBFY2xpcHNlIEhpZ2dpbnMgMS4wIHJlbGVhc2UgaXMgYW4gaW1wb3J0YW50IHN0ZXAgaW4gdGhlIGRldmVsb3BtZW50IG9mIGFuIGludGVyb3BlcmFibGUgaWRlbnRpdHkgbWV0YXN5c3RlbSB0aGF0IGlzIHVzYWJsZSBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3JtcyyUIHNhaWQgS2ltIENhbWVyb24sIGNoaWVmIGlkZW50aXR5IGFyY2hpdGVjdCwgYXQgTWljcm9zb2Z0LiCTV2l0aCB0aGlzIG5ldyByZWxlYXNlLCBIaWdnaW5zIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBpbXBsZW1lbnQgaW5mb3JtYXRpb24gY2FyZHMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MgQ2FyZFNwYWNlIGFuZCBhY2Nlc3MgYWxsIHRoZSBzYW1lIHNpdGVzIHRoYXQgQ2FyZFNwYWNlIHVzZXJzIGNhbi6UPC9wPiAgCQoJCTxwPpNBbiBvcGVuIHNvdXJjZSBmcmFtZXdvcmsgZm9yIFVzZXItY2VudHJpYyBJZGVudGl0eSBpcyBjcml0aWNhbCB0byBmYWNpbGl0YXRlIGlubm92YXRpdmUgc29sdXRpb25zIGluIHRoaXMgZW1lcmdpbmcgYXJlYSBhbmQgdG8gaW1wcm92ZSBzZWN1cml0eSyUIHNhaWQgVXBwaWxpIFNyaW5pdmFzYW4sIFNlbmlvciBEaXJlY3RvciBvZiBJZGVudGl0eSBNYW5hZ2VtZW50IGFuZCBTZWN1cml0eSBQcm9kdWN0cywgT3JhY2xlLiCTVGhlIG11bHRpLXByb3RvY29sIGFuZCBwbGF0Zm9ybS1hZ25vc3RpYyBhcmNoaXRlY3R1cmUgb2YgdGhlIEhpZ2dpbnMgZnJhbWV3b3JrIGlzIGNvbnNpc3RlbnQgd2l0aCBPcmFjbGWScyBob3QtcGx1Z2dhYmxlIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCBhcmNoaXRlY3R1cmUgYW5kIGhlbHBzIGV4dGVuZCB0aGUgYmVuZWZpdHMgb2YgdXNlci1jZW50cmljIElkZW50aXR5IHRvIGhldGVyb2dlbmVvdXMgSWRlbnRpdHkgZW52aXJvbm1lbnRzlCA8L3A+CgkJPHA+k0lkZW50aXR5IGhhcyBiZWNvbWUgYSBmb2NhbCBwb2ludCBvZiBwcml2YWN5IGFuZCByZWd1bGF0b3J5IGNvbmNlcm5zLiAgSGlnZ2lucyBoZWxwcyBhZGRyZXNzIHRob3NlIGNvbmNlcm5zIGJ5IHByb3ZpZGluZyBhIGNvbW1vbiB0cnVzdCBmcmFtZXdvcmsgdGhhdCBlbmFibGVzIGFwcGxpY2F0aW9ucyB0byBzaGFyZSBpZGVudGl0aWVzIHNlY3VyZWx5Iiwgc2FpZCBKZWZmcmV5IEJyb2JlcmcsIFNlbmlvciBBcmNoaXRlY3QsIFNlY3VyaXR5IFNvbHV0aW9ucywgQ0EuICJDQSBiZWxpZXZlcyBIaWdnaW5zIHJlcHJlc2VudHMgYSB2YWx1YWJsZSBtZWNoYW5pc20gZm9yIGJyaWRnaW5nIHRoZSBkaXZpZGUgYmV0d2VlbiBhcHBsaWNhdGlvbnMgYW5kIGlkZW50aXR5IG1hbmFnZW1lbnQgYWxsb3dpbmcgb3JnYW5pemF0aW9ucyB0byBidWlsZCBpZGVudGl0eS1hd2FyZSBhcHBsaWNhdGlvbnMsIGFuZCBpbmNvcnBvcmF0ZSB1c2VyLWNlbnRyaWMgY29uY2VwdHMuIENBIHN1cHBvcnRzIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYW5kIEhpZ2dpbnMgaW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgaWRlbnRpdHkgZWNvc3lzdGVtLiI8L3A+CgkJPHA+IJNUaGlzIHJlbGVhc2UgcmVwcmVzZW50cyBhbm90aGVyIG1ham9yIG1pbGVzdG9uZSBpbiB0aGUgSGlnZ2lucyBwcm9qZWN0LiBXZSBhcHByZWNpYXRlIHRoZSBncm93aW5nIG51bWJlciBvZiBjb21wYW5pZXMgYW5kIGluZGl2aWR1YWxzIHdobyBjb250cmlidXRlIHRvIHRoZSBIaWdnaW5zIHByb2plY3QgYW5kIGFyZSBtYWtpbmcgaXQgZWFzaWVyIHRvIGRldmVsb3Agc3lzdGVtcyB0aGF0IGdpdmUgcGVvcGxlIG1vcmUgY29udHJvbCBvdmVyIHRoZWlyIHBlcnNvbmFsIG9ubGluZSBpbmZvcm1hdGlvbpQgc2FpZCBQYXVsIFRyZXZpdGhpY2ssIENFTyBvZiBQYXJpdHkgQ29tbXVuaWNhdGlvbnMgSW5jLiwgYW5kIE1hcnkgUnVkZHksIEZvdW5kZXIgb2YgTWVyaXN0aWMsIEluYy4gdGhlIEhpZ2dpbnMgcHJvamVjdCBjby1sZWFkcy48L3A+CgkJPHA+RWNsaXBzZSBIaWdnaW5zIDEuMCBpcyBub3cgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvaGlnZ2lucy9kb3dubG9hZHMucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2hpZ2dpbnMvZG93bmxvYWRzLnBocDwvYT4uICBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0IGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2hpZ2dpbnMiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvaGlnZ2luczwvYT4uPC9wPgoJCQoJCTxwPjxzdHJvbmc+QWJvdXQgdGhlIEVjbGlwc2UgRm91bmRhdGlvbjwvc3Ryb25nPjxiciAvPgoJCUVjbGlwc2UgaXMgYW4gb3BlbiBzb3VyY2UgY29tbXVuaXR5IHdob3NlIHByb2plY3RzIGFyZSBmb2N1c2VkIG9uIHByb3ZpZGluZyBhbiBleHRlbnNpYmxlIGRldmVsb3BtZW50IHBsYXRmb3JtIGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmtzIGZvciBidWlsZGluZyBzb2Z0d2FyZS4gRWNsaXBzZSBwcm92aWRlcyBleHRlbnNpYmxlIHRvb2xzIGFuZCBmcmFtZXdvcmtzIHRoYXQgc3BhbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgbGlmZWN5Y2xlLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgbW9kZWxpbmcsIGxhbmd1YWdlIGRldmVsb3BtZW50IGVudmlyb25tZW50cyBmb3IgSmF2YSwgQy9DKysgYW5kIG90aGVycywgdGVzdGluZyBhbmQgcGVyZm9ybWFuY2UsIGJ1c2luZXNzIGludGVsbGlnZW5jZSwgcmljaCBjbGllbnQgYXBwbGljYXRpb25zIGFuZCBlbWJlZGRlZCBkZXZlbG9wbWVudC4gQSBsYXJnZSwgdmlicmFudCBlY29zeXN0ZW0gb2YgbWFqb3IgdGVjaG5vbG9neSB2ZW5kb3JzLCBpbm5vdmF0aXZlIHN0YXJ0LXVwcywgdW5pdmVyc2l0aWVzIGFuZCByZXNlYXJjaCBpbnN0aXR1dGlvbnMgYW5kIGluZGl2aWR1YWxzIGV4dGVuZCwgY29tcGxlbWVudCBhbmQgc3VwcG9ydCB0aGUgRWNsaXBzZSBQbGF0Zm9ybS48L3A+CgkJPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBhIG5vdC1mb3ItcHJvZml0LCBtZW1iZXIgc3VwcG9ydGVkIGNvcnBvcmF0aW9uIHRoYXQgaG9zdHMgdGhlIEVjbGlwc2UgcHJvamVjdHMuIEZ1bGwgZGV0YWlscyBvZiBFY2xpcHNlIGFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFyZSBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+d3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CgkJCgkJPHA+PGNlbnRlcj48aT5BbGwgY29tcGFueS9wcm9kdWN0IG5hbWVzIGFuZCBzZXJ2aWNlIG1hcmtzIG1heSBiZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiB0aGVpciByZXNwZWN0aXZlIGNvbXBhbmllcy48L2k+PC9jZW50ZXI+PC9wPgoJCQoJCTxiciAvPjxiciAvPjxzdHJvbmc+UHJlc3MgQ29udGFjdDwvc3Ryb25nPjxicj4JCgkJU3RldmUgRWlzZW5zdGFkdDxici8+CgkJUGFnZSBPbmUgUHVibGljIFJlbGF0aW9uczxici8+CgkJOTE5LTc4MS04MDk2PGJyLz4KCQlzdGV2ZUBwYWdlb25lcHIuY29tPGJyLz4KCQkKCQkKCQk8Y2VudGVyPiMgIyAjPC9jZW50ZXI+IAoJCTxiciAvPgoJCTxicj4KCQkJPGJyPgoJPC9kaXY+Cgo8L2Rpdj4KCgoJCQoKRU9IVE1MOwoKCiRodG1sID0gbWJfY29udmVydF9lbmNvZGluZygkaHRtbCwgIkhUTUwtRU5USVRJRVMiLCAiYXV0byIpOwojIEdlbmVyYXRlIHRoZSB3ZWIgcGFnZQokQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4KCg==