QWxsIHRoaXMgaXMgdHJ1ZSBhbHNvIGluIGNvbm5lY3Rpb24gd2l0aCAKb3VyIHN0dWRpZXMgb2YgbmF0dXJlLiBUaGUgbmF0dXJlLXNwaXJpdHMgCmFyZSBhZnJhaWQgb2YgdXMsIGlmIHdlIHN0dWR5IHRoZW0gdG9vIApzY2llbnRpZmljYWxseTsgd2UgbXVzdCBnbyB3aXRoIHRoZW0gaW50byAKdGhlaXIgbGlmZSwgYW5kIHRoZW4gdGhleSB3aWxsIGJlIGludGVyZXN0ZWQgCmluIHRoZSBsaWZlIG9mIGh1bWFuaXR5IGFsc28uIEluXyB0aGVpciAKYmxpbmQgd2F5LCBmbG93ZXJzIGFuZCBvdGhlciB0aGluZ3MgZmVlbCAKam95IGFuZCBmcmllbmRsaW5lc3MuIEVtZXJzb24gc2FpZCB0aGF0IGl0IAphcHBlYXJlZCB0byBoaW0gdGhhdCB3aGVuIGhlIHJldHVybmVkIApob21lLCB0aGUgdHJlZXMgaW4gaGlzIGdhcmRlbiBmZWx0IGdsYWQgdG8gCgoKMzEwIEFEWUFSIFRBTEtTIC0gCgoKc2VlIG9yIGZlZWwgaGltIGFnYWluLCBhbmQgbm8gZG91YnQgaXQgd2FzIApxdWl0ZSB0cnVlLiBUaGUgdHJlZXMgYW5kIGFuaW1hbHMgZG8ga25vdyAKdGhlIHBlb3BsZSB3aG8gbG92ZSB0aGVtLiBJbiBJbmRpYSBwZW8tIApwbGUgc3BlYWsgb2YgdGhlIOKAnGx1Y2t5IGhhbmTigJ0gaW4gcGxhbnRpbmcsIAptZWFuaW5nIHRoYXQgdGhpbmdzIHdpbGwgZ3JvdyBmb3Igc29tZSDigJggCnBlb3BsZSwgYnV0IG5vdCBmb3Igb3RoZXJzLi4gT25lIG11c3QgYmUgCmluIHN5bXBhdGh5IHdpdGggdGhlIHB1cnBvc2UuIG9mIHRoZSAKTG9jb3MuIElmIHdlIGFyZSBhY3RpdmVseSBoZWxwaW5nIGluIHRoZSAKcHJvZ3Jlc3Mgb2YgYWxsLCB3ZSBhcmUgbGl2aW5nLGluIEhpcyB3aWxsLCAKd2hpY2ggcGVuZXRyYXRlcyBuYXR1cmUsIGFuZCB0aGlzIGlzIGZlbHQgCmJ5IG5hdHVyZSBhdCBvbmNlOyBidXQgaWYgd2UgcHV0IG91cnNlbHZlcyAKaW4gb3Bwb3NpdGlvbiB0byBldm9sdXRpb24sIG5hdHVyZSBzaHJpbmtzIApiYWNrIGZyb20gdXMgbGlrZSBhIHNlbnNpdGl2ZSBjaGlsZC4gCgoKT3VuIEFycmlydXZlIFRvd2FrcHMgQ0hJTERSRU4gCgoKV2hhdCBpcyB5b3VyIGF0dGl0dWRlIHRvd2FyZHMgeW91ciAKY2hpbGRyZW4/IFJlbWVtYmVyIHRoYXQgdGhlc2UgYXJlIGVnb3MsIApzcGFya3Mgb2YgdGhlIGRpdmluZSBsaWZlLiBUaGV5IGhhdmUgYmVlbiAKZW50cnVzdGVkIHRvIHlvdSwgbm90IHRoYXQgeW91IG1heSBkb21pLSAKbmVlciBvdmVyIHRoZW0gYW5kIGJydXRhbGx5IGlsbC10cmVhdCB0aGVtLCAKYW5kIHVzZSB0aGVtIGZvciB5b3VyIG93biBwcm9maXQgYW5kLSAKYWR2YW50YWdlLCBidXQgdGhhdCB5b3UgbWF5IGxvdmUgdGhlbSAKYWhkIGhlbHAgdGhlbSBpbiBvcmRlciB0aGF0IHRoZXkgbWF5IGJlIApleHByZXNzaW9ucyBvZiB0aGF0IGRpdmluZSBsaWZlLCBXaGF0IGFuIApvdXRwb3VyaW5nIG9mIGxvdmUgdGhlbiwgeW91IG91Z2h0IHRvIGZlZWwhIAoKClRIRSBGRUFSIE9GIERFQVRIICQxMSAKCgrigJhIb3cgYmV5b25kIGFsbCB3b3JkcyB5b3VyIHBhdGllbmNlIGFuZCAKY29tcGFzc2lvbiBzaG91bGQgYmUhIEhvdyBkZWVwbHkgeW91IApzaG91bGQgZmVlbCB0aGUgaG9ub3VyIG9mIGJlaW5nIHRydXN0ZWQgdG8gCnNlcnZlIHRoZW0gaW4gdGhpcyB3YXkhIFJlbWVtYmVyIGFsd2F5cyAK4oCYdGhhdCB5b3UgYXJlIG5vdCB0aGUgb2xkZXIgYW5kIHRoZXkgdGhlIAp5b3VuZ2VyLCBidXQgdGhhdCBhcyBzb3VscyB5b3UgYXJlIGFsbCBvZiAKYWJvdXQgdGhlIHNhbWUgYWdlLCBhbmQgdGhlcmVmb3JlIHlvdXIgCmF0dGl0dWRlIG11c3Qgbm90IGJlIHRoYXQgb2YgYSBzZWxmaXNoIGFuZCAKY3J1ZWwgZGljdGF0b3IsIGJ1dCBvZiBhIGhlbHBmdWwgZnJpZW5kLiBZb3UgCmRvIG5vdCByZWdhcmQgeW91ciBmcmllbmQgZGlmZmVyZW50bHkgd2hlbiAKaGUgcHV0cyBvbiBhIG5ldyBjb2F0OyByZW1lbWJlciB0aGVyZS0gCmZvcmUgdGhhdCB3aGVuIHlvdSBtZWV0IGEgY2hpbGQgeW91IGFyZSAKbWVldGluZyBhIHNvdWwgd2VhcmluZyBhIG5ldyBjb2F0LCBhbmQgCnlvdSBzaG91bGQgdHJ5IGJ5IHBlcmZlY3Qga2luZG5lc3MgYW5kIApsb3ZlIHRvIGRyYXcgb3V0IHRoZSBiZXN0IHRoYXQgaXMgaW4gaXQsIAphbmQgdG8gaGVscCBpdCB0byBmaXQgb24gaXRzIG5ldyBjb2F0LiAKUmVtZW1iZXIgYWx3YXlzIHRoYXR+IHRydWUgZ29vZCBtZWFucyAKZ29vZCBmb3IgYWxsLCBhbmQgdGhhdCBnb29kIGlzIF8gbmV2ZXIgCmdhaW5lZCBhdCB0aGUgY29zdCBvZiBzdWZmZXJpbmcgdG8gb3RoZXJzLiAKVGhhdCB3aGljaCBpcyBzbyBnYWluZWQgaXMgbm90IHJlYWxseSBnb29kIAphdCBhbGwuIAoKClR1dCBGZWFyIG9yIERlYXJhIAoKClRoZSBmZWFyIC5vZiBkZWF0aCBpcyBhIHN0ZXJuIHJlYWxpdHkgCmluIHRoZSBtaW5kcyBvZiBtYW55IHBlb3BsZS4gQSBmYXIgbGFyZ2VyIAoKCjgxMiBBRFlBUiBUQUxLUyAKCgpudW1iZXIgc3VmZmVyIGZyb20gaXQgdGhhbiBvbmUgd291bGQgc3VwLSAKcG9zZSwgYW5kIHN0aWxsIG1vcmUgZnJvbSB0aGUgZmVhciBvZiB3aGF0IAptYXkgaGFwcGVuIHRvIHVzIGFmdGVyIGRlYXRoLiBOIGF0dXJhbGx5IAp0aGlzIGlzIGVzcGVjaWFsbHkgdG8gYmUgZm91bmQgYW1vbmcgCnBlb3BsZSB3aG8gaGF2ZSBpZGVhcyBvZiBoZWxsLCBhbmQgb2Yg4oCYIApwcm9iYWJsZSBwdW5pc2htZW50IGlmIHRoZXkgZG8gbm90IGJlbGlldmUgCnRoaXMgb3IgdGhhdC4gSXQgaXMgYSBncm9zcyBhbmQgZGVncmFkZWQgCmZvcm0gb2Ygc3VwZXJzdGl0aW9uLCBidXQgc3RpbGwgdGhlIHN1ZmZlcmluZyAKaXMgcmVhbCwgYW5kIHdoYXQgaXMgZXZlbiB3b3JzZSBpcyB0aGUgZmVhciAKYXMgdG8gdGhlIGZhdGUgb2Ygb3RoZXJzIGFmdGVyIGRlYXRoLiBNYW55IAphIG1vdGhlcuKAmXMgd2hvbGUgbGlmZSBpcyBlbWJpdHRlcmVkIGJ5IApkb3VidHMgYW5kIGZlYXJzIGFzIHRvIHdoYXQgbWF5IGhhcHBlbiAKdG8gaGVyIHNvbi4gSGUgZ29lcyBmYXIgYXdheSBmcm9tIGhlciwgCnBlcmhhcHM7IGhlIGZhbGxzIGludG8gdGhlIG9yZGluYXJ5IGhhYml0cyAKb2YgbWVuIG9mIHRoZSB3b3JsZCwgYW5kIGRvZXMgbWFueSB0aGluZ3MgCmNvbnRyYXJ5IHRvIHRoZSBuYXJyb3cgcmVsaWdpb3VzIHRlYWNoaW5nIGluIAp3aGljaCBzaGUgaGFzIGJlZW4gYnJvdWdodCB1cCwgYW5kIHNvIHNoZSAKdGhpbmtzIHRoYXQgaGUgbXVzdCBzdWZmZXIgZXRlcm5hbCB0b3J0dXJlLiAKV2hpbGUgaXQgaXMgdHJ1ZSB0aGF0IHRoZXJlIGlzIG5vIGV0ZXJuYWwgCmhlbGwgZm9yIGhpbSwgdGhlcmUgaXMgY2VydGFpbmx5IG11Y2ggcmVhIAplYXJ0aGx5IHN1ZmZlcmluZyBmb3IgaGVyLiAKCkJ1dCB3ZSBrbm93IHRoZSBsYXcgb2Yga2FybWEsIGFuZCAKcmVhbGlzZSB0aGF0IHRoZSBzdGF0ZXMgYWZ0ZXIgZGVhdGggYXJlIApzaW1wbHkgYSBjb250aW51YXRpb24gb2YgdGhlIGxpZmUgd2hpY2ggd2UgCmFyZSBub3cgbGl2aW5nLCBhbHRob3VnaCBvbiBhIGhpZ2hlciBwbGFuZSAKYW5kIHdpdGhvdXQgYSBwaHlzaWNhbCBib2R5OyBhbmQgd2hlbiBpbiAKYWRkaXRpb24gd2UgbGVhcm4gdGhhdCB3aGF0IHdlIGNvbW1vbmx5IApjYWxdIGxpZmUgaXMgb25seSBvbmUgZGF5IGluIHRoZSByZWFsIGFuZCAKCgpUSEUgRkVBUiBPRiBERUFUSCB+IEIzcjggCgoKZ3JlYXRlciBsaWZlLCB0aGVuIGFsbCB0aGVzZSB0aGluZ3MgYXNzdW1lIApxdWl0ZSBhIGRpZmZlcmVudCBwZXJzcGVjdGl2ZS4gV2Uga25vdyAKdGhlbiB0aGF0IHByb2dyZXNzIGlzIGFic29sdXRlbHkgY2VydGFpbi4gQSAKbWFuIG1heSBzdHVtYmxlLCBoZSBtYXkgXyBzZXQgaGltc2VsZiAKYWdhaW5zdCB0aGUgZm9yY2VzIG9mIHByb2dyZXNzLCBidXQgaGUgd2lsbCAKYmUgY2FycmllZCBvbiBieSB0aGVtIGluIHNwaXRlIG9mIGhpbXNlbGYsIAp0aG91Z2ggd2hlbiBoZSByZXNpc3RzIHRoZXJlIHdpbGwgYmUgbXVjaCAKb2YgYnJ1aXNpbmcgYW5kIHRyb3VibGUgZm9yIGhpbS4gV2Ugc2VlIAphdCBvbmNlIHRoYXQgdGhpcyBrbm93bGVkZ2UgZWxpbWluYXRlcyBmZWFyLiAKVGhlIHNvLWNhbGxlZCBsb3NzIG9mIGEgbG92ZWQgb25lIGJ5IApkZWF0aCBpcyByZWFsbHkgb25seS4uYSB0ZW1wb3JhcnkgYWJzZW5jZSwgCmFuZCBub3QgZXZlbiB0aGF0IGFzIHNvb24gYXMgYSBtYW4gCmRldmVsb3BlcyB0aGUgcG93ZXIgdG8gc2VlIG9uIHRoZSBoaWdoZXIgCnBsYW5lcy4gVGhvc2Ugd2hvbSB3ZSB0aGluayB3ZSBfIGhhdmUgCmxvc3QgYXJlIHdpdGggdXNfIHN0aWxsLCBldmVuIHRob3VnaCB3aXRoIApvdXIgcGh5c2ljYWwgZXllcyB3ZSBjYW5ub3Qgc2VlIHRoZW07IGFuZCAKd2Ugc2hvdWxkIG5ldmVyIGZvcmdldCB0aGF0LCBhbHRob3VnaCB3ZSAKbWF5IHNvbWV0aW1lcyBiZSB1bmRlciB0aGUgZGVsdXNpb24gdGhhdCAKd2UgaGF2ZSBsb3N0IHRoZW0sIHRoZXkgYXJlIG5vdCBpbiB0aGUgCsKuZWFzdCB1bmRlciB0aGUgZGVsdXNpb24gdGhhdCB0aGV5IGhhdmUgbG9zdCAKdXMsIGJlY2F1c2UgdGhleSBjYW4gc3RpbGwgc2VlIG91ciBhc3RyYWwgCmJvZGllcywgYW5kIGFzIHNvb24gYXMgd2UgbGVhdmUgdGhlIHBoeXMtIAppY2FsIHZlaGljbGUgaW4gc2xlZXAgd2UgYXJlIHdpdGggdGhlbSBhbmQgCmNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZW0gXyBleGFjdGx5IGFzIAp3aGVuIHRoZXkgd2VyZSBvbiB0aGUgcGh5c2ljYWwgcGxhbmUuIApXZSBuZWVkIG5vdCB3b3JyeSBvdXJzZWx2ZXMgYWJvdXQgc2F2aW5nIApvdXIgc291bHM7IHJhdGhlciBvbiB0aGUgb3RoZXIgaGFuZCwgYXMgYSAKCgpUaGVvc29waGljYWwgd3JpdGVyIG9uY2Ugc2FpZCwgd2UgbWF5IG5vdCAKNDAgCgoKMzE0IEFEWUFSIFRBTEtTIAoKCmJlIGVudGlyZWx5IGJleW9uZCB0aGUgaG9wZSB0aGF0IHNvbWUgZGF5IApvdXIgc291bHMgbWF5IHNhdmUgdXMuIFRoZXJlIGlzIG5vIHNvdWwgCnRvIGJlIHNhdmVkIGluIHRoZSBvcmRpbmFyeSBzZW5zZSBpbiB3aGljaCAKdGhlIHdvcmRzIGFyZSB1c2VkLCBiZWNhdXNlIHdlIG91cnNlbHZlcyAKYXJlIHRoZSBzb3VsczsgYW5kIGZ1cnRoZXJtb3JlIHRoZXJlIGlzIApub3RoaW5nIHRvIGJlIHNhdmVkIGZyb20gZXhjZXB0IG91ciBvd24gCmVycm9yIGFuZCBpZ25vcmFuY2UuIFRoZSBib2R5IGlzIG5vdGhpbmcgCmJ1dCBhIHZlc3RtZW50LCBhbmQgd2hlbiBpdCBpcyB3b3JuIG91dCAKd2UgY2FzdCBpdCBhc2lkZS4gCgoKQ28tT1BFUkFUSU9OIAoKCkl0IGlzIHBhcnQgb2YgdGhlIHNjaGVtZSBvZiB0aGUgTG9jb3MgCnRoYXQgYXQgYSBjZXJ0YWluIHN0YWdlIGluIGl0cyBldm9sdXRpb24gCmh1bWFuaXR5IG11c3QgYmVnaW4gdG8gZ3VpZGUgaXRzZWxmLiBUaGVyZS0gCmZvcmUgYWxsIHRoZSBmdXR1cmUgQnVwcHVhcywgTWFudXMgYW5kIApBZGVwdHMgd2lsbCBiZSBtZW1iZXJzIG9mIG91ciBvd24gCmh1bWFuaXR5LCB0aGUgTG9yZHMgZnJvbSBWZW51cyBoYXZpbmcgCmdvbmUgb24gdG8gb3RoZXIgd29ybGRzLiBUaGVyZWZvcmUgYWxzbyAKdGhlIExvZ29zIGFjdHVhbGx5IGNvdW50cyB1cG9uIHVzIGFsbCwgdXAtIApvbiB5b3UgYW5kIHVwb24gbWUuIFdlIG1heSBoYXZlIApuaW5ldHktbmluZSBmYXVsdHMgYW5kIG9ubHkgb25lIHZpcnR1ZSwgYnV0IAppZiB0aGF0IG9uZSB2aXJ0dWUgaXMgbmVlZGVkIGluIHRoZSBUaGVvLSAKc29waGljYWwgd29yayAoYW5kIHdoYXQgdmlydHVlIGlzIG5vdCAKbmVlZGVkPykgd2Ugc2hhbGwgc3VyZWx5IGhhdmUgdGhlIG9wcG9yLSAKdHVuaXR5IHRvIHVzZSBpdC4gCgoKMDAtT1BFUkFUSU9OIDMxNSAKCgpXZSBzaG91bGQgdGhlbiB2YWx1ZSBvdXIgY28td29ya2VycyBmb3IgCndoYXQgdGhleSBjYW4gZG8sIGFuZCBub3QgYmUgY29uc3RhbnRseSAKYmxhbWluZyB0aGVtIGZvciB3aGF0IHRoZXkgY2Fubm90IGRvLiAKTWFueSBwZW9wbGUgaGF2ZSBlYXJuZWQgdGhlIHJpZ2h0IHRvIGRvIApzb21lIHBhcnRpY3VsYXIga2luZCBvZiB3b3JrLCBub3R3aXRoc3RhbmQtIAppbmcgdGhhdCB0aGVpciBkZWZlY3RzIG1heSBiZSBncmVhdGVyIHRoYW4gCnRoZWlyIHZpcnR1ZXMuIFBlb3BsZSBvZnRlbiBtYWtlIGEgc2FkIAptaXN0YWtlIGluIGNvbXBhcmluZyB0aGVpciB3b3JrIHdpdGggdGhhdCAKb2Ygb3RoZXJzLCBhbmQgd2lzaGluZyB0aGF0IHRoZXkgaGFkIHRoZSAKc2FtZSBvcHBvcnR1bml0aWVzLiBUaGUgdHJ1dGggaXMgdGhhdCBlYWNoIApvbmUgaGFzIGhpcyBvd24gZ2lmdHMgYW5kIGhpcyBvd24gcG93ZXJzLCAKYW5kIGl0IGlzIG5vdCBleHBlY3RlZCBvZiBhbnkgbWFuIHRoYXQgaGUgCnNob3VsZCBkbyBhcyBtdWNoIGFzIHNvbWUgb3RoZXIgbWFuLCBidXQgCm9ubHkgdGhhdCBoZSBzaG91bGQgZG8gaGlzIGJlc3TigJRqdXN0IGhpcyAKb3duIGJlc3QuIAoKVGhlIC5NYXN0ZXIgb25jZSBzYWlkIHRoYXQgaW4gcmVhbGl0eSAKdGhlcmUgYXJlIG9ubHkgdHdvIGNsYXNzZXMgb2YgbWVu4oCUdGhvc2UgCndobyBrbm93IGFuZCB0aG9zZSB3aG8gZG8gbm90IGtub3cuIApUaG9zZSB3aG8ga25vdyBhcmUgdGhleSB3aG8gaGF2ZSBzZWVuIAp0aGUgbGlnaHQgYW5kIGhhdmUgdHVybmVkIHRvd2FyZHMgaXQsIAp0aHJvdWdoIHdoYXRldmVyIHJlbGlnaW9uIHRoZXkgaGF2ZSBjb21lLCAKYXQgaG93ZXZlciBncmVhdCBhIGRpc3RhbmNlIGZyb20gdGhlIGxpZ2h0IAp0aGV5IG1heSBhcyB5ZXQgZmluZCB0aGVtc2VsdmVzLiBNYW55IG9mIAp0aGVtIG1heSBiZSBzdWZmZXJpbmcgbXVjaCBpbiB0aGVpciAKc3RydWdnbGUgdG93YXJkcyB0aGF0IGxpZ2h0LCBidXQgYXQgbGVhc3QgCnRoZXkgaGF2ZSBob3BlIGJlZm9yZSB0aGVtLCBhbmQgd2hpbGUgd2UgCnN5bXBhdGhpc2UgZGVlcGx5IHdpdGggdGhlbSBhbmQgc3RyaXZlIHRvIApoZWxwIHRoZW0gd2UgeWV0IHJlYWxpc2UgdGhhdCB0aGV5IGFyZSBieSAKCgozMTYgQURZQVIgVEFMS1MgCgoKbm8gbWVhbnMgaW4gdGhlIHdvcnN0IGNhc2UuIFRoZSBwZW9wbGUgCnJlYWxseSB0byBiZSBwaXRpZWQgYXJlIHRob3NlIHdobyBhcmUgcXVpdGUgCmluZGlmZmVyZW50IHRvIGFsbCBoaWdoZXIgdGhvdWdodOKAlHRob3NlIHdobyAKZG8gbm90IHN0cnVnZ2xlIGJlY2F1c2UgdGhleSBkbyBub3QgY2FyZSwgCm9yIHRoaW5rLCBvciBrbm93IHRoYXQgdGhlcmUgaXMgYW55dGhpbmcgCmZvciB3aGljaCB0byBzdHJpdmUuIFRoZXNlIGFyZSB0aGV5IGluIAp0cnV0aCB3aG8gY29uc3RpdHV0ZSDigJx0aGUgZ3JlYXQgb3JwaGFuLCAKaHVtYW5pdHku4oCdIAoKCkEgRGF5IG9yIExpcmUgCgoKSXQgaXMgbm90IHdpc2UgdG8gc3BlY2lhbGlzZSBiZXlvbmQgYSAKY2VydGFpbiBwb2ludCwgYmVjYXVzZSBvbmUgY2FuIG5ldmVyIHJlYWxseSAKZ2V0IHRvIHRoZSBlbmQgb2YgYW55IHN1YmplY3QsIGFuZCBpdCAKdGVuZHMgbW9yZSBhbmQgbW9yZSB0byBuYXJyb3cgdGhlIG1pbmQgCmFuZCB0aGUgb3V0bG9vaywgdG8gcHJvZHVjZSBhIG9uZS1zaWRlZCAKYW5kLiBkaXN0b3J0ZWQgZGV2ZWxvcG1lbnQsIGFuZCB0byBjYXVzZSAKb25lIHRvIHZpZXcgZXZlcnl0aGluZyBvdXQgb2YgaXRzIGR1ZSAKcHJvcG9ydGlvbi4gV2UgYXJlIGluIHRoZSBoYWJpdCBvZiB0aGluay0gCmluZyBvZiBhIGxpZmUtdGltZSBhcyBhIGxvbmcgcGVyaW9kLCBidXQgCnJlYWxseSBpdCBpcyBvbmx5IGEgZGF5IGluIHRoZSBncmVhdGVyIGxpZmUuIApZb3UgY2Fubm90IGZpbmlzaCBhIHJlYWxseSBncmVhdCBwaWVjZSAKb2Ygd29yayBpbiBvbmUgZGF5OyBpdCBtYXkgbmVlZCBtYW55IApkYXlzLCBhbmQgdGhlIHdvcmsgb2Ygb25lIHBhcnRpY3VsYXIgZGF5IAptYXkgYXQgdGhlIHRpbWUgc2hvdyBubyBfIGFwcHJlY2lhYmxlIApyZXN1bHQ7IGJ1dCBuZXZlcnRoZWxlc3MgZXZlcnkgZGF54oCZcyAKCgpBIERBWSBPRiBMSUZFIDMxNyAKCgp3b3JrIGlzIG5lY2Vzc2FyeSB0byB0aGUgY29tcGxldGlvbiBvZiB0aGUgCmdyZWF0IHRhc2ssIGFuZCBpZiBhIG1hbiBzaG91bGQgaWRsZSBkYXkgCmFmdGVyIGRheSBiZWNhdXNlIHRoZSBjb21wbGV0aW9uIG9mIHRoZSAKd29yayBzZWVtcyBzbyBmYXIgb2ZmIGhlLiB3b3VsZCBjZXJ0YWlubHkgCm5vdCBzdWNjZWVkIGluIGdldHRpbmcgaXQgZG9uZS4gCgpUaGVyZSBhcmUgbWFueSB0byB3aG9tIFRoZW9zb3BoeSAKY29tZXMgbGF0ZSBpbiBsaWZlLCB3aG8gZmVlbCB0aGVtc2VsdmVzIApzb21ld2hhdCBkaXNjb3VyYWdlZCBieSB0aGUgb3V0bG9vaywgdGhpbmstIAppbmcgdGhleSBhcmUgdG9vIG9sZCBub3cgdG8gdGFrZSB0aGVtLSAKc2VsdmVzIGluIGhhbmQgc2VyaW91c2x5IG9yIHRvIGRvIGFueSB2YWx1LSAKYWJsZSB3b3JrLCB0aGF0IHRoZSBiZXN0IHRoYXQgdGhleSBjYW4gZG8gCm5vdyBpcyB0byBnbyBxdWlldGx5IG9uIHRvIHRoZSBlbmQgb2YgCnRoaXMgaW5jYXJuYXRpb24gaW4gdGhlIGhvcGUgdGhhdCB0aGV5IG1heSAKaGF2ZSBhIGJldHRlciBvcHBvcnR1bml0eSBpbiB0aGUgbmV4dC4gCgpUaGlzIGlzIGFzYWQgbWlzdGFrZSwgYW5kIHRoYXQgZm9yIHZhcmlvdXMgCnJlYXNvbnMuIFlvdSBkbyBub3Qga25vdyB3aGF0IGtpbmQgb2YgCmluY2FybmF0aW9uIGthcm1hIGlzIHByZXBhcmluZyBmb3IgeW91IG5leHQgCnRpbWUgeW91IHJldHVybiB0byBlYXJ0aC4gWW91IGRvIG5vdCAKa25vdyB3aGV0aGVyIGJ5IGFueSBwcmV2aW91cyBhY3Rpb24geW91IApoYXZlIGRlc2VydmVkIHRoZSBvcHBvcnR1bml0eSBvZiBiZWluZyBib3JuIAppbnRvIFRoZW9zb3BoaWNhbCBzdXJyb3VuZGluZ3MuIEluIGFueSBjYXNlIAp0aGUgbW9zdCBsaWtlbHkgd2F5IHRvIHNlY3VyZSBzdWNoIGEgCmJpcnRoIGlzIHRvIG1ha2UgdXNlIG9mIHRoZSBvcHBvcnR1bml0eSAKd2hpY2ggaGFzIGNvbWUgdG8geW91IG5vdywgZm9yLCBvZiBhbGwgCnRoYXQgd2UgaGF2ZSBsZWFybmVkIGFib3V0IHRoZSB3b3JraW5nIG9mIAp0aGlzIGdyZWF0IGxhdyBvZiBjYXVzZSBhbmQgZWZmZWN0LCB0aGlzIG9uZSAKZmFjdCBzdGFuZHMgb3V0IG1vc3QgY2xlYXJseeKAlHRoYXQgdGhlIHJlc3VsdCAKb2YgdGFraW5nIGFuIG9wcG9ydHVuaXR5IGlzIGludmFyaWFibHkgdGhhdCAKCgozMTggQURZQUIgVEFMS1MgCgoKYW5vdGhlciBhbmQgd2lkZXIgb3Bwb3J0dW5pdHkgaXMgZ2l2ZW4uIApJZiB0aGVyZWZvcmUgeW91IG5lZ2xlY3QgdGhlIG9wcG9ydHVuaXR5IApwdXQgYmVmb3JlIHlvdSBieSB5b3VyIGVuY291bnRlciB3aXRoIApUaGVvc29waHkgbm93LCBpdCBpcyBwb3NzaWJsZSB0aGF0IGluIHRoZSAKbmV4dCBpbmNhcm5hdGlvbiB0aGUgY2hhbmNlIG1heSBub3QgY29tZTogCnRvIHlvdSBhZ2Fpbi4gCgpJZiBhIG1hbiBzZXRzIHRvIHdvcmsgZWFybmVzdGx5IGFuZCAKcGVybWVhdGVzIGhpcyBzcGlyaXQgYXMgdGhvcm91Z2hseSBhcyBfcG9zc2ktIApibGUgd2l0aCBUaGVvc29waGljYWwgaWRlYXMsIHRoYXQgd2lsbCBidWlsZCAKdGhlbSB3ZWxsIGludG8gdGhlIGVnbywgYW5kIHdpbGwgZ2l2ZSBoaW0gCnNvIGdyZWF0IGFuIGF0dHJhY3Rpb24gdG93YXJkcyB0aGVtIHRoYXQgCmhlIGlzIGNlcnRhaW4sIGV2ZW4gdGhvdWdoIGhlIG1heSBub3QgCnJlbWVtYmVyIHRoZW0gaW4gZGV0YWlsLCB0byBzZWVrIGZvciAKdGhlbSBpbnN0aW5jdGl2ZWx5LCBhbmQgdG8gcmVjb2duaXNlIHRoZW0sIGluIApoaXMgbmV4dCBiaXJ0aC4gRXZlcnkgbWFuIHRoZXJlZm9yZSBzaG91bGQgCmJlZ2luIFRoZW9zb3BoaWNhbCB3b3JrIGp1c3QgYXMgc29vbiBhcyAKaGUgaGVhcnMgb2YgaXQsIGJlY2F1c2Ugd2hhdGV2ZXIgb2YgaXQgaGUgCmNvbnRyaXZlcyB0byBhY2hpZXZlLCBob3dldmVyIGxpdHRsZSBpdCBtYXkgCmJlLCB3aWxsIGJlIGp1c3Qgc28gbXVjaCB0byB0aGUgZ29vZCwgYW5kIApoZSB3aWxsIGJlZ2luIHRvLW1vcnJvdyB3aGVyZSBoZSBoYXMgbGVmdCAKb2ZmIHRoaXMgdGltZS4gQWxzbyBieSB0cnltZyB0byBkbyB3aGF0IApoZSBjYW4gd2l0aCBzdWNoIHZlaGljbGVzIGFzIGhlIGhhcywgb2ItIApzdGluYXRlIGFuZCB1bnJlc3BvbnNpdmUgdGhvdWdoIHRoZXkgbWF5IApwcm92ZSB0aHJvdWdoIGxhY2sgb2YgcGxpYWJpbGl0eSwgaGUgd2lsbCAKYXNzdXJlZGx5IGRvIG11Y2ggdG8gZWFybuKAmSBmb3IgaGltc2VsZiAKbW9yZSBwbGlhYmxlIHZlaGljbGVzIGZvciBuZXh0IHRpbWUuIFNvIApubyBlZmZvcnQgaXMgbG9zdCwgYW5kIGl0IGlzIG5ldmVyIHRvbyBsYXRlIAppbiBhbnkgZ2l2ZW4gbGl0ZSB0byBlbnRlciB1cG9uIHRoZSBsb25nLCAKCgpNRURJVEFUSU9OIDMxOSAKCgpsb25nIHVwd2FyZCBwYXRoLCBhbmQgdG8gbWFrZSBhIGNvbW1lbmNlLSAKbWVudCBpbiB0aGUgZ2xvcmlvdXMgd29yayBvZiBoZWxwaW5nIApvdGhlcnMuIAoKV2l0aCBhbiBldGVybmFsIGxpZmUgYmVmb3JlIHVzIGl0IHdvdWxkIArigJhiZSBhIG1pc3Rha2UgdG8gd29ycnkgYmVjYXVzZSB0aGUgcHJlc2VudCAKZGF5IGlzIGRyYXdpbmcgbmVhciBpdHMgZXZlbmluZywgb3IgaW4gCmRlc3BhaXIgdG8gbmVnbGVjdCB0aGUgcHJlcGFyYXRpb25zIGZvciB0aGUgCmNvbWluZyBkYXkuIExpZ2h0IG9uIHRoZSBQYXRoIHNheXM6IArigJxLaWxsIG91dCBkZXNpcmUgb2YgbGlmZS7igJ0gVGhpcyBpcyBvZnRlbiBtaXMtIAp1bmRlcnN0b29kLCBidXQgaXRzIG1lYW5pbmcgc2hvdWxkIGJlIHBsYWluLiAKWW91IGNhbm5vdCBsb3NlIHlvdXIgbGlmZTsgd2h5IHRoZW4gCnNob3VsZCB5b3UgZGVzaXJlIGl0PyBJdCBjYW5ub3QgcG9zc2libHkgCmJlIHRha2VuIGZyb20geW91LiBBdCB0aGUgc2FtZSB0aW1lIHRoZSAKcXVvdGF0aW9uIG1lYW5zIHRoYXQgeW91IHNob3VsZCBraWxsIG91dCAKZGVzaXJlIGZvciBwYXJ0aWN1bGFyIGJvZGlseSBjb25kaXRpb25zLiAKCgpNRURJVEFUSU9OIAoKCkkgdGhpbmsgdGhhdCBvdXIgbWVtYmVycyBzb21ldGltZXMgbWlzLSAKdGFrZSB3aXRoIHJlZ2FyZCB0byBtZWRpdGF0aW9uLCBiZWNhdXNlIHRoZXkgCmhhdmUgbm90IHRob3JvdWdobHkgdW5kZXJzdG9vZCB0aGUgZXhhY3QgCndheSBpbiB3aGljaCBpdCB3b3Jrcy4gVGhleSBzb21ldGltZXMgCnRoaW5rIHRoYXQgYmVjYXVzZSB0aGV5IGRvIG5vdCBmZWVsIGhhcHB5IAphbmQgdXBsaWZ0ZWQgYWZ0ZXIgYSBtZWRpdGF0aW9uIGl0IGlzIHRoZXJlLSAKZm9yZSBhIGZhaWx1cmUgYW5kIGVudGlyZWx5IHVzZWxlc3MsIG9yIHRoZXkgCmZpbmQgdGhlbXNlbHZlcyBkdWxsIGFuZCBoZWF2eSBhbmQgaW5jYXBhLSAKCgokOTAgQURZQVIgVEFMS1MgCgoKYmxlIG9mIG1lZGl0YXRpb24uIFRoZXJlIHNlZW1zIG5vIHJlYWxpdHkgCmluIGFueXRoaW5nIGZvciB0aGVtLCBubyBjZXJ0YWludHkgYWJvdXQgCmFueXRoaW5nLCBhbmQgdGhleSBmZWVsIHRoYXQgdGhleSBhcmUgbWFraW5nIApubyBwcm9ncmVzcy4gVGhleSBzdXBwb3NlIHRoYXQgdGhpcyBtdXN0IApiZSBzb21laG93IHRoZWlyIG93biBmYXVsdCBhbmQgdGhleSByZS0gCnByb2FjaCB0aGVtc2VsdmVzIGZvciBpdDsgYnV0IHRoZXkgb2Z0ZW4gCmFzayB3aGF0IHRoZXkgY2FuIGRvIHRvIGltcHJvdmUgbWF0dGVycyAKYW5kIHRvIHJlc3RvcmUgdGhlIGpveSB0aGV5IHVzZWQgdG8gZmVlbC4gCk5vdyB0aGUgZmFjdCBpcyB0aGF0IHRoYXQgZXhwZXJpZW5jZSBpbiAKcmVnYXJkIHRvIG1lZGl0YXRpb24gaXMgdGhhdCBvZiBhbGwgc2Vla2VycyAKYWZ0ZXIgdGhlIHNwaXJpdHVhbCBoZmU7IHlvdSB3aWxsIGZpbmQgdGhhdCAKdGhlIENocmlzdGlhbiBzYWludHMgY29uc3RhbnRseSBzcGVhayBvZiB0aGVpciAKc3VmZmVyaW5ncyBhdCBwZXJpb2RzIG9mIHdoYXQgdGhleSBjYWxsIOKAnCBzcGlyaXQtIAp1YWwgZHJ5bmVzcyzigJ0gd2hlbiBub3RoaW5nIHNlZW1zIGFueSB1c2UgCmFuZCB0aGV5IGZlZWwgYXMgdGhvdWdoIHRoZXkgaGFkIGxvc3Qgc2lnaHQgCm9mIEdvZCBhbHRvZ2V0aGVyLiBJbWFnaW5lIHRoYXQgSSBhbSBfIHNpdC0gCnRpbmcgbG9va2luZyB0aHJvdWdoIGEgd2lkZS1vcGVuIHdpbmRvdyAKdXBvbiBhIGJlYXV0aWZ1bCBoaWxsLXNpZGUsIGJ1dCB0aGUgc2t5IGlzIApkdWxsIGdyZXksIGhlYXZ5IHdpdGggYSB2YXN0IHBhbGwgb2YgY2xvdWQgCnByb2JhYmx5IG1pbGVzIGluIHRoaWNrbmVzcy4gSSBoYXZlIG5vdCBzZWVuIAp0aGUgc3VuIGZvciB0aHJlZSBkYXlzLiBJIGNhbm5vdCBmZWVsIGhpcyAKcmF5cywgYnV0IEkga25vdyBoZSBpcyB0aGVyZSwgYW5kIEkga25vdyAKdGhhdCBzb21lIGRheSB0aGVzZSBjbG91ZHMgd2lsbCByb2xsIGF3YXkgCmFzIG90aGVycyBoYXZlIGRvbmUsIGFuZCBJIHNoYWxsIHNlZSBoaW0gCmFnYWluLiBXaGF0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhmZSBvZiB0aGUgCndvcmxkIGlzIHRoYXQgaGUgc2hvdWxkIGJlIHRoZXJlLCBub3QgdGhhdCAKSSBzaG91bGQgc2VlIGhpbTsgaXQgaXMgZmFyIHBsZWFzYW50ZXIgdG8gc2VlIApoaW0gYW5kIHRvIGZlZWwgdGhlIHdhcm10aCBvZiBoaXMgcmF5cywgCgoKTUVESVRBVElPTiAzMjEgCgoKYnV0IGl0IGlzIG5vdCBhLCBuZWNlc3NpdHkgb2YgaGZlLiBJIGtub3cgCmp1c3QgZXhhY3RseSBob3cgdGhlc2UgcGVvcGxlIGZlZWwsIGFuZCBpdCAKaXMgY29sZCBjb21mb3J0IHRvIGJlIHRvbGQgdGhhdCBvdXIgZmVlbGluZ3MgCmRvIG5vdCBtYXR0ZXIsIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGEgdmVyeSAKcmVhbCBzZW5zZSBpbiB3aGljaCBpdCBpcyB0cnVlLiAKCkkgdGhpbmsgaXQgaXMgaGVscGZ1bCB0byByZW1lbWJlciB0aGF0IApvdXIgbWVkaXRhdGlvbiBoYXMgc2V2ZXJhbCBvYmplY3Rz4oCUZm9yIApleGFtcGxlOiAKCjEuIFRvIGVuc3VyZSB0aGF0LCBob3dldmVyIGRlZXBseSB3ZSAKbWF5IGJlIGltbWVyc2VkIGluIHRoZSBhZmZhaXJzIG9mIHRoZSB3b3JsZCwgCndlIHNoYWxsIGRldm90ZSBhdCBsZWFzdCBzb21lIHRpbWUgZWFjaCAKZGF5IHRvIHRoZSB0aG91Z2h0IG9mIGEgaGlnaCBpZGVhbC4gCgoyLiBUbyBkcmF3JyB1cyBuZWFyZXIgdG8gdGhlIE1hc3RlciBhbmQgCnRvIHRoZSBMb2Nvcywgc28gdGhhdCBmcm9tIFRoZW0gc3RyZW5ndGggCm1heSBiZSBwb3VyZWQgdXBvbiB1cyBhbmQgdGhyb3VnaCB1cyB0byAKYmVuZWZpdCB0aGUgd29ybGQuIDsgCgozLiBUbyB0cmFpbiBvdXIgaGlnaGVyIGJvZGllcywgc28gXyB0aGF0IAp0aGV5IG1heSBoYXZlIGNvbnN0YW50IHByYWN0aWNlIGluIHJlc3BvbmQtIAppbmcgdG8gdGhlIGhpZ2hlc3QgdmlicmF0aW9uc+KAlHRvIGRvIHRoZSAKc2FtZSB0aGluZyBmb3IgdGhlbSB0aGF0IGEgY2FyZWZ1bGx5IGFycmFuZ2VkIApzeXN0ZW0gb2YgZ3ltbmFzdGljcyBvciByZWd1bGFyIGV4ZXJjaXNlIGRvZXMgCmZvciB0aGUgcGh5c2ljYWwgYm9keS4gCgpOb3cgeW91IHdpbGwgb2JzZXJ2ZSB0aGF0IGFsbCB0aGVzZSBvYmplY3RzIAphcmUgYXR0YWluZWQganVzdCB0aGUgc2FtZSB3aGV0aGVyIHdlOiBmZWVsIApoYXBweSBvciBub3QuIEEgbWlzdGFrZSB0aGF0IG1hbnkgcGVvcGxlIAptYWtlIGlzIHRvIHN1cHBvc2UgdGhhdCBhIG1lZGl0YXRpb24gd2hpY2ggCmlzIHVuc2F0aXNmYWN0b3J5IHRvIHRoZW0gaXMgdGhlcmVmb3JlIGluLSAKCgplZmZlY3R1YWwuIEl0IGlzIGp1c3QgaGtlIGEgbGl0dGxlIGNoaWxkIHBlci0gCkFsIAoKCjMyMiBBRFlBUiBUQUxLUyAKCgpmb3JtaW5nIGRhaWx5IGhlciBob3VyIG9mIHByYWN0aWNlIHVwb24gCnRoZSBwaWFuby4gU29tZXRpbWVzIHBlcmhhcHMgc2hlIHBhcnRpYWxseSAKZW5qb3lzIGl0LCBidXQgdmVyeSBvZnRlbiBpdCBpcyBhIG1lcmUgd2VhcmwtIApuZXNzIHRvIGhlciwgYW5kIGhlciBvbmx5IHRob3VnaHQgaXMgdG8gCmZpbmlzaCBpdCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBTaGUgZG9lcyAKbm90IGtub3csIGJ1dCB3ZSBkbywgdGhhdCBldmVyeSBzdWNoIGhvdXIgCmlzIGFjY3VzdG9taW5nIGhlciBmaW5nZXJzIHRvIHRoZSBpbnN0cnUtIAptZW50LCBhbmQgaXMgYnJpbmdpbmcgbmVhcmVyIGFuZCBuZWFyZXIgCnRoZSB0aW1lIHdoZW4g4oCYc2hlIHdpbGwgZGVyaXZlIGZyb20gaGVyIAptdXNpYyBhbiBlbmpveW1lbnQgb2Ygd2hpY2ggbm93IHNoZSAKZG9lcyBub3QgZXZlbiBkcmVhbS4gWW91IHdpbGwgb2JzZXJ2ZSB0aGF0IAp0aGlzIG9iamVjdCBpcyBiZWluZyBhdHRhaW5lZCBqdXN0IGFzIG11Y2ggCmJ5IHRoZSB1bnBsZWFzYW50IGFuZCB1bnNhdGlzZmFjdG9yeSBob3VyIG9mIApwcmFjdGljZSBhcyBieSB0aGF0IHdoaWNoIHNoZSBlbmpveXMuIFNvIAppbiB0aGUgd29yayBvZiBvdXIgbWVkaXRhdGlvbiBzb21ldGltZXMgCndlIGZlZWwgaGFwcHkgYW5kIHVwbGlmdGVkLCBhbmQgc29tZXRpbWVzIApub3Q7IGJ1dCBpbiBib3RoIGNhc2VzIGFsaWtlIGl0IGhhcyBfIGJlZW4gCmFjdGluZyBmb3Igb3VyIGhpZ2hlciBib2RpZXMgYXMgZG8gXyB0aGUgCmV4ZXJjaXNlcyBvZiBwaHlzaWNhbCBjdWx0dXJlIG9yIHRyYWluaW5nIApmb3Igb3VyIHBoeXNpY2FsIGJvZHkuIEl0IGlzIHBsZWFzYW50ZXIgCndoZW4geW91IGhhdmUgd2hhdCB5b3UgY2FsbCBhIOKAmGdvb2TigJkgCm1lZGl0YXRpb247IGJ1dCB0aGUgb25seSBkaWZmZXJlbmNlIGJlLSAKdHdlZW4gd2hhdCBzZWVtcyBhIGdvb2Qgb25lIGFuZCBhIGJhZCAKb25lIGhlcyBpbiBpdHMgZWZmZWN0IHVwb24gdGhlIGZlZWxpbmdzLCBhbmQgCm5vdCBpbiB0aGUgcmVhbCB3b3JrIHdoaWNoIGl0IGRvZXMgdG93YXJkcyAKb3VyIGV2b2x1dGlvbi4gCgpUaGUgcmVhc29uIG9mIHRoZSB0ZW1wb3JhcnkgZHVsbG5lc3MgaXMgCm5vdCDigJhhbHdheXMgaW4gb3Vyc2VsdmVz4oCUb3IgcmF0aGVyLCBpdCBpcyBub3QgCgoKTUVESVRBVElPTiAzMjMgCgoKYWx3YXlzIGF0dHJpYnV0YWJsZSB0byBhbnl0aGluZyB0aGF0IGNhbiByZWEtIApzb25hYmx5IGJlIGNhbGxlZCBvdXIgZmF1bHQuIE9mdGVuIGl0IGlzIApwdXJlbHkgcGh5c2ljYWwsIHJlc3VsdGluZyBmcm9tIG92ZXItZmF0aWd1ZSBvciAKYSBuZXJ2b3VzIHN0cmFpbjsgb2Z0ZW4gaXQgMXMgZHVlIHRvIHN1cnJvdW5kLSAKaW5nIGFzdHJhbCBvciBtZW50YWwgaW5mbHVlbmNlcy4gT2YgY291cnNlIGl0IAppcyBvdXIga2FybWEgdG8gYmUgc3ViamVjdGVkIHRvIHRoZXNlLCAKYW5kIHNvIGluIHRoYXQgbW9yZSByZW1vdGUgd2F5IHdlIGFyZSAKcmVzcG9uc2libGUgOyBidXQgd2UgbXVzdCBqdXN0IGRvIHRoZSBiZXN0IAp3ZSBjYW4gd2l0aCB0aGVtLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCAKZm9yIHVzIHRvIGJlIGRlc3BvbmRlbnQsIG9yIHRvIHdhc3RlIG91ciAKdGltZSByZXByb2FjaGluZyBvdXJzZWx2ZXMuIAoKQW5vdGhlciByZWFzb24gYWxzbyBtYXkgYmUgdGhhdCBhdCBjZXItIAp0YWluIHRpbWVzIHRoZSBwbGFuZXRhcnkgaW5mbHVlbmNlcyBhcmUgbW9yZSAKZmF2b3VyYWJsZSBmb3IgbWVkaXRhdGlvbiB0aGFuIGF0IG90aGVycy4gSSAKa25vdyBub3RoaW5nIG9mIHRoaXMgbXlzZWxmLCBmb3IgSSBoYXZlIApuZXZlciBjb25zaWRlcmVkIHRoZSBwbGFuZXRhcnkgaW5mbHVlbmNlcyBpbiAKdGhlc2UgbWF0dGVycywgYnV0IGhhdmUgYWx3YXlzIGZvcmNlZCBteSAKd2F5IHRvIHdoYXQgSSBkZXNpcmVkOyBidXQgSSBoYXZlIGhlYXJkIAphIGZyaWVuZCBzYXkgdGhhdCBhbiBhc3Ryb2xvZ2VyIHRvbGQgaGltIAp0aGF0IG9uIGNlcnRhaW4gb2NjYXNpb25zIHdoZW4gSnVwaXRlciBoYWQgCmNlcnRhaW4gcmVsYXRpb25zIHdpdGggdGhlIG1vb24gdGhpcyBoYWQgCnRoZSBlZmZlY3Qgb2YgZXhwYW5kaW5nIHRoZSBldGhlcmljIGF0bW8tIApzcGhlcmUgYW5kIG1ha2luZyBtZWRpdGF0aW9uIGVhc2llciwgb3IgYXQgCmxlYXN0IG1ha2luZyBpdCBhcHBlYXIgbW9yZSBzdWNjZXNzZnVsLiBUaGXigJkgCmFzdHJvbG9nZXIgZ2F2ZSBoaW0gYSBsaXN0LCB3aGljaCBoZSBjb25zdWx0LSAKZWQgYWZ0ZXIgdGFraW5nIG5vdGVzIG9mIHRoZSBjb25kaXRpb25zIG9mIApoaXMgbWVkaXRhdGlvbnMgZGFpbHkgZm9yIHRocmVlIG9yIGZvdXIgCndlZWtzLCB3aGVuIGhlIGZvdW5kIHRoYXQgdGhlIHJlc3VsdHMgCgoKKyAKCgozOTQgQURZQVIgVEFMS1MgCsOpIAoKCmV4YWN0bHkgYWdyZWVkIHdpdGggdGhlIGluZmZ1ZW5jZXMgd2hpY2ggCndlcmUgc2FpZCB0byBiZSBhY3RpbmcuIENlcnRhaW4gYXNwZWN0cyAKd2l0aCBTYXR1cm4sIG9uIHRoZSBvdGhlciBoYW5kLCB3ZXJlIHNhaWQgCnRvIGNvbmdlc3QgdGhlIGV0aGVyaWMgYXRtb3NwaGVyZSwgbWFraW5nIAp0aGUgd29yayBvZiBtZWRpdGF0aW9uIGRpZmZpY3VsdCwgYW5kIHRoaXMgOiAKYWxzbyB3YXMgdmVyaWZpZWQgaW4gdGhlIHNhbWUgd2F5LiAKClRoZSBoaWdoZXN0IHRob3VnaHQgdGhhdCB3ZSBjYW4gaGF2ZSAKaXMgdGhhdCBvZiB0aGUgc3VwcmVtZSBMb3JkIG9mIGFsbCwgYnV0IApvZiBjb3Vyc2Ugd2UgbXVzdCBub3Qgc3VwcG9zZSB0aGF0IG91ciAKdGhvdWdodCBjaGFuZ2VzIGluIHRoZSBsZWFzdCB0aGUgYXR0aXR1ZGUgCm9mIHRoZSBTdXByZW1lIHRvd2FyZHMgdXMuIFdlIHdobyBhcmUgCnN0dWRlbnRzIG91Z2h0IHRvIGJlIGZhciBiZXlvbmQgdGhlIHN0YWdlIAphdCB3aGljaCBhIG1hbiB0aGlua3MgdGhhdCBoZSBjYW4gcHJvZHVjZSAKY2hhbmdlIGluIHRoZSBTdXByZW1l4oCUYSB0aG91Z2h0IHdoaWNoIApiZWxvbmdzIG9ubHkgdG8gdGhlIGlnbm9yYW50IGFuZCB1bnBoaWxvLSAKc29waGljYWwgYW1vbmcgdGhlIENocmlzdGlhbnMuIFdlIG91cnNlbHZlcyAKaG93ZXZlciBhcmUgY2VydGFpbmx5IGFmZmVjdGVkIGJ5IG9wZW5pbmcgCm91cnNlbHZlcyB0byBIaW0uIElmIHlvdSBvcGVuIHRoZSB3aW5kb3cgCm9mIHlvdXIgcm9vbSB0byB0aGUgc3VuLCB0aGUgY29uZGl0aW9uIG9mIAp5b3VyIHJvb20gaXMgbXVjaCBjaGFuZ2VkIGJ5IOKAmHRoZSAKcG93ZXIgb2YgdGhlIHN1biwgYnV0IHRoZSBzdW4gaXMgaW4gbm8gd2F5IApjaGFuZ2VkIGJ5IHlvdXIgb3BlbmluZyB0aGUgd2luZG93LiAKT3BlbiB0aGUgd2luZG93cyBvZiB5b3VyIHNvdWwgdG8gR29kLiAKCkR1cmluZyBtZWRpdGF0aW9uIG9uZSBtYXkgdHJ5IHRvLiB0aGluayAKb2YgdGhlIFN1cHJlbWUgU2VsZiBpbiBldmVyeXRoaW5nIGFuZCAK4oCYZXZlcnl0aGluZyBpbiBpdC4gVHJ5IHRvIHVuZGVyc3RhbmQgaG93IAp0aGUgU2VsZiBpcyBlbmRlYXZvdXJpbmcgdG8gZXhwcmVzcyBpdHNlbGYgCnRocm91Z2ggdGhlIGZvcm0uIE9uZSBtZXRob2Qgb2YgcHJhY3RpY2UgCgoKTUVESVRBVElPTiB8IDMyMCAKIyAKCmZvciB0aGlzIGlzIHRvIHRyeSB0byBpZGVudGlmeSB5b3VyIGNvbnNjaW91cy0gCm5lc3Mgd2l0aCB0aGF0IG9mIHZhcmlvdXMgY3JlYXR1cmVzLCBzdWNoIAphcyBhIGZseSwgYW4gYW50LCBvciBhIHRyZWUuIFRyeSB0byBzZWUgCmFuZCBmZWVsIHRoaW5ncyBhcyB0aGV5IHNlZSBhbmQgZmVlbCB0aGVtLCB1bnRpbCAKYXMgeW91IHBhc3MgaW53YXJkcyBhbGwgY29uc2Npb3VzbmVzcyBvZiB0aGUgCnRyZWUgb3IgdGhlIGluc2VjdCBmYWxscyBhd2F5LCBhbmQgdGhlIGhmZSBvZiAKdGhlIExvY29zIGFwcGVhcnMuIFdlIGFyZSB2ZXJ5IG11Y2ggbW9yZSAKdGhhbiB0aGUgdHJlZSBvciB0aGUgYW50OyB0aGVyZWZvcmUgdGhlcmUgCmlzIG5vIGRhbmdlciBvZiBvdXIgYmVpbmcgdW5hYmxlIHRvIHdpdGgtIApkcmF3IG91ciBjb25zY2lvdXNuZXNzIHdoZW4gdGhlIGV4cGVyaS0gCm1lbnQuIDFzIGZpbmlzaGVkLiBXZSBkbyBub3QgYWZ0ZXIgYWxsIAppbXByaXNvbiBpdCBpbiB0aGUgZm9ybSBvZiB0aGUgdHJlZSBvciB0aGUgCmFudDsgd2UgZXhwYW5kIGl0IHRvIHRha2UgaW4gdGhlIGxpZmUgCmluIGV2ZXJ5IGZvcm0uIFRoZSBtYW4gd2hvIGRvZXMgdGhpcyAKZm9yIHRoZSBmaXJzdCB0aW1lIGlzIHVzdWFsbHkgc3VycHJpc2VkIHdoZW4gCmhlIHJlYWxpc2VzIHRoZSBsaW1pdGF0aW9ucyB1bmRlciB3aGljaCAKYW5pbWFscyBhY3QuIEhlIGhhZCB0aG91Z2h0IGFuIGFuaW1hbCAKYWN0ZWQgaW4gYSBjZXJ0YWluIHdheSBmb3Igd2hhdCBzZWVtZWQgCnF1aXRlIG9idmlvdXMgcmVhc29ucywgYnV0IHdoZW4gaGUgcmVhbGx5IAplbnRlcnMgaW50byB0aGUgYW5pbWFsIGhlIGZpbmRzIHRoYXQg4oCYaXRzIAptb3RpdmVzIGFuZCBpbnRlbnRpb25zIGFyZSB3aG9sbHkgZGlmZmVyZW50LiAKVGhlIGRpc2NpcGxlIGhhcyB0byBnbyB0aHJvdWdoIHRoaXMgcHJvY2VzcyAKYWxzbyB3aXRoIGxvd2VyIGNsYXNzZXMgb2YgaHVtYW4gYmVpbmdzLCAKYmVjYXVzZSB3aXRob3V0IGl0IGhlIGNvdWxkIG5vdCBwZXJmZWN0bHkgCgpoZWxwIHRoZW0uIApUaGlzIGVuYWJsZXMgdXMgdG8gZ2V0IGRvd24gdG8gdGhlLiBiZWQtIApyb2NrIG9mIHRoZSBTZWxmLCBhbmQgY2xlYXJzIGF3YXkgdGhlIGRhcmstIApuZXNzIGFuZCBsb25lbGluZXNzIHdoaWNoIG9mdGVuIGNvbWUgb3ZlciB1cyAKCgozMjYgQURZQVIgVEFMS1MgCgoKYXQgb25lIHN0YWdlIGluIG91ciBwcm9ncmVzcy4gV2hlbiB3ZSBrbm93IApxdWl0ZSBjZXJ0YWlubHkgdGhhdCB3ZSBhcmUgcGFydCBvZiBhIHdob2xlIAp3ZSBkbyBub3Qgc28gbXVjaCBtaW5kIHdoZXJlIHRoaXMgcGFyLSAKdGljdWxhciBmcmFnbWVudCBvZiBpdCBtYXkgYmUsIG9yIHRocm91Z2ggCndoYXQgZXhwZXJpZW5jZXMgaXQgbWF5IGJlIHBhc3NpbmcuIFdoYXQtIApldmVyIGxvbmVsaW5lc3Mgd2UgbWF5IGhhdmUsIHdlIGZlZWwsIHdlIAprbm93LCB0aGF0IHdlIGFyZSBuZXZlciBhbG9uZTsgdGhlIE1hc3RlciAKaXMgYWx3YXlzIHRoZXJlIHdhaXRpbmcgdG8gaGVscCB3aGVyZSBoZWxwIAppcyBwb3NzaWJsZSwgV2UgbXVzdCBnaXZlIHVwIHRoZSBjbGluZ2luZyAKdG8gcGFydGljdWxhciBmb3JtcywgYW5kIGhhdmUgbm8gbW90aXZlIApidXQgdG8gZG8gdGhlIHdpbGwgb2YgdGhlIExvd29zLiBXZSAKbXVzdCBuZXZlciBhbGxvdyB0aGUgZmVlbGluZyBvZiBsb25lbGluZXNzIAp0byBtYWtlIHVzIGZvcmdldCB0aGUgTWFzdGVyIG9yIGxvc2UgZmFpdGggCmluIEhpbSwgZm9yIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlIHVubGVzcyAKd2UgaGF2ZSB0aGUgZnVsbGVzdCBjb25maWRlbmNlIGluIHRoZSBNYXN0ZXIgCndob20gd2UgY2hvb3NlIHRvIHNlcnZlLiBJZiB3ZSBoYXZlIG9ubHkgCmEgaGFsZi1oZWFydGVkIHF1ZXN0aW9uaW5nIGZhaXRoIGluIEhpbSB3ZSAKY2Fubm90IHByb2dyZXNzLiBXZSBuZWVkIG5vdCBtYWtlIHRoZSAKY2hvaWNlIG9mIGEgTWFzdGVyIHVubGVzcyB3ZSB3aWxsOyBidXQgCuKAmGhhdmluZyBtYWRlIGl0IHdlIG11c3QgaGF2ZSBmYWl0aCBpbiB0aGUgClRlYWNoZXIgYW5kIEhpcyBtZXNzYWdlLiAKCkluIGNvbnRyb2xsaW5nIHRoZSBtaW5kIG9uZSBtdXN0IGZpcnN0IHR1cm4gCmF3YXkgdGhlIHNlbnNlcyBmcm9tIG91dHdhcmQgc291bmRzIGFuZCAKc2lnaHRzLCBhbmQgYmVjb21lIGluc2Vuc2l0aXZlIHRvIHRoZSB3YXZlcyAKb2YgdGhvdWdodCBhbmQgZW1vdGlvbiBmcm9tIG90aGVycy4gVGhhdCAKaXMgY29tcGFyYXRpdmVseSBlYXN5LCBidXQgdGhlIG5leHQgc3RhZ2UgaXMgCnZlcnkuIGRpZmZpY3VsdCwgZm9yIHdoZW4gdGhpcyBpcyBkb25lIHRoZXJlIApjb21lIHVwIGZyb20gd2l0aGluIGRpc3R1cmJhbmNlcyB3aGljaCAKCgpNRURJVEFUSU9OIDMyNyAKCgpzcHJpbmcgZnJvbSB0aGUgdW5jb250cm9sbGVkIGFjdGl2aXR5IG9mIHRoZSAKbWluZC4gVGhlIG1lZGl0YXRpb24gb2YgbWFueSBvZiBvdXIgYmUtIApnaW5uZXJzIGNvbnNpc3RzIG1vc3RseSBvZiBhIGNvbnRpbnVvdXMgCnN0cnVnZ2xlIHRvIGNvbWUgYmFjayB0byB0aGUgcG9pbnQuIEhlcmUgCmNvbWVzIGluIHRoZSBhZHZpY2UgZ2l2ZW4gaW4gVGhlIFZvd2Ugb2YgCnRoZSBTaWxlbmNlLiDigJhUaGUgbWluZCBpcyB0aGUgc2xheWVyIG9mIHRoZSAKcmVhbDsgbGV0IHRoZSBkaXNjaXBsZSBzbGF5IHRoZSBzbGF5ZXIu4oCZ4oCZIFlvdSAKbXVzdCBub3Qgb2YgY291cnNlIGRlc3Ryb3kgeW91ciBtaW5kLCBmb3IgCnlvdSBjYW5ub3QgZ2V0IGFsb25nIHdpdGhvdXQgaXQsIGJ1dCB5b3UgCm11c3QgZG9taW5hdGUgaXQ7IGl0IGlzIHlvdXJzLCBub3QgeW91LiBUaGUgCmJlc3Qgd2F5IHRvIG92ZXJjb21lIGl0cyB3YW5kZXJpbmcgaXMgdG8gCnVzZSB0aGUgd2lsbC4gSXQgaXMgb2Z0ZW4gc3VnZ2VzdGVkIHRoYXQgCnRoZSBwdXBpbCBzaG91bGQgaGVscCBoaW1zZWxmIGJ5IG1ha2luZyBhIApzaGVsbCByb3VuZCBoaW07IGJ1dCBhZnRlciBhbGwgc2hlbGxzIGFyZSBidXQgCmNydXRjaGVzLiBEZXZlbG9wZSB3aWxsLCBhbmQgeW91IHdpbGwgYmUgCmFibGUgdG8gZGlzcGVuc2Ugd2l0aCB0aGVtLiBUaGUgYXN0cmFsIGJvZHkgCnRyaWVzIHRvIGltcG9zZSBpdHNlbGYgdXBvbiB5b3UgaW4gdGhlIHNhbWUgCndheSwgYW5kIHRvIG1ha2UgeW91IGJlbGlldmUgdGhhdCBpdHMgCmRlc2lyZXMgYXJlIHlvdXJzOyBidXQgd2l0aCB0aGF0IGFsc28gd2UgCm11c3QgZGVhbCBpbiBhIHByZWNpc2VseSBzaW1pbGFyIG1hbm5lci4gCuKAmFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBkZWdyZWUgdG8gd2hpY2ggCndpbGwgbWF5IGJlIGRldmVsb3BlZC4gVGhlcmUgYXJlIGRlY2lkZWQgCmxpbWl0YXRpb25zIHRvIHRoZSBleHRlbnQgdG8gd2hpY2ggdGhlIApzdHJlbmd0aCBvZiB0aGUgcGh5c2ljYWwgYm9keSBjYW4gYmUgaW5jcmVhcy0gCmVkLCBidXQgdGhlcmUgc2VlbSB0byBiZSBub18gbGltaXRhdGlvbnMgCmluIHRoZSBjYXNlIG9mIHRoZSB3aWxsLiBGb3J0dW5hdGVseSB3ZSAKY2FuIHRyYWluIGl0IGluIHRoZSBvcmRpbmFyeSBzbWFsbCB0aGluZ3Mgb2YgCmRhaWx5IGhmZSBldmVyeSBkYXkgYW5kIGFsbCBkYXkgbG9uZywgYW5kIAoKCjMzOCBBRFlBUiBUQUxLUyAKCgp3ZSBjYW4gaGF2ZSBubyBiZXR0ZXIgcHJhY3RpY2UgdGhhbiB0aGlzLiAKSXQgaXMgbXVjaCBlYXNpZXIgZm9yIGEgbWFuIHRvIHNjcmV3IHVwIApoaXMgY291cmFnZSB0byBmYWNlIGEgZHJhbWF0aWMgbWFydHlyZG9tIApiZWZvcmUgYSBjcm93ZCBvZiBwZW9wbGUgdGhhbiB0byBnbyBvbiAKZG9pbmcgdGhlIHRpcmVzb21lIGRhaWx5IGR1dHkgd2l0aCB0aXJlc29tZSAKcGVvcGxlIGRheSBhZnRlciBkYXkgYW5kIHllYXIgYWZ0ZXIgeWVhci4gClRoaXMgbGF0dGVyIG5lZWRzIG11Y2ggbW9yZSB3aWxsLXBvd2VyIAp0aGFuIHRoZSBmb3JtZXIuIEJlIGNhcmVmdWwgaG93ZXZlciB0aGF0IHlvdSAKZG8gbm90IG1ha2Ugb3RoZXJzIHN1ZmZlciBpbiB5b3VyIGVmZm9ydHMgdG8gCmRldmVsb3BlIHlvdXIgb3duIHdpbGwuIFNvbWV0aW1lcyBwZW9wbGUgCmhhdmUgc2hvd24gd2lsbC1wb3dlciBieSBsZWF2aW5nIGhvbWUgCmFuZCBmcmllbmRzIGFuZCBnb2luZyBvdXQgdG8gZmFjZSBhbGwga2luZHMgCm9mIGRpZmZpY3VsdGllcyBhbmQgcHJpdmF0aW9ucyBpbiBvcmRlciB0byAKZG8gVGhlb3NvcGhpY2FsIHdvcmsuIFRoYXQgaXMgcXVpdGUgcmlnaHQgCmlmIGEgbWFuIGlzIGFic29sdXRlbHkgZnJlZSB0byBkbyBpdDsgYnV0IAphIG1hbiB3aG8gbGVmdCBoaXMgd2lmZSBhbmQgZmFtaWx5IGZvciAKdGhhdCBwdXJwb3NlLCBvciBhbiBvbmx5IHNvbl8gd2hvIGxlZnQgCnBhcmVudHMgdGhhdCB3ZXJlIGRlcGVuZGVudCB1cG9uIGhpbSwgCndvdWxkIGV2aWRlbnRseSBiZSBuZWdsZWN0aW5nIGhpcyBkdXR5IGluIAphIHdheSB3aGljaCBubyBvbmUgaGFzIGEgcmlnaHQgdG8gZG8sIApldmVuIGZvciB0aGUgc2FrZSBvZiB0aGUgbm9ibGVzdCBtb3RpdmVzLCAKCkFzIGEgcmVzdWx0IG9mIGRldGVybWluZWQgbWVkaXRhdGlvbiB3ZSAKYmVnaW4gdG8gYnVpbGQgaW50byBvdXIgYm9kaWVzIHRoZSBoaWdoZXIgCmtpbmRzIG9mIG1hdHRlci4gQXQgdGhpcyBzdGFnZSB3ZSBvZnRlbiAKZmVlbCBncmFuZCBlbW90aW9ucywgY29taW5nIGZyb20gdGhlIGJ1ZGRoLSAKaWMgbGV2ZWwgYW5kIHJlZmxlY3RlZCBpbiB0aGUgYXN0cmFsIGJvZHksIAphbmQgdW5kZXIgdGhlaXIgaW5mbHVlbmNlIHdlIG1heSBkbyBmaW5lIAp3b3JrIOKAmGFuZCBzaG93IGdyZWF0IHNlbGYtc2FjcmlmaWNlLiBCdXQgCgoKTUVESVRBVElPTiAzMjkgCgoKdGhlbiAuaXMgbmVlZGVkIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgCm1lbnRhbCBhbmQgY2F1c2FsIGJvZGllcyBpbiBvcmRlciB0byBzdGVhZHkgCmFuZCBiYWxhbmNlIHVzOyBvdGhlcndpc2UgdGhlIGdyYW5kIAplbW90aW9ucyB0aGF0IGhhdmUgc3dheWVkIHVzIGluIHRoZSByaWdodCAKZGlyZWN0aW9uIG1heSB2ZXJ5IHJlYWRpbHkgYmVjb21lIGEgbGl0dGxlIAp0d2lzdGVkIGFuZCBzd2F5IHVzIGFsb25nIHNvbWUgXyBvdGhlciAKYW5kIGxlc3MgZGVzaXJhYmxlIGxpbmVzLiBXaXRoIGZlZWxpbmcgYWxvbmUgCndlIG5ldmVyIG9idGFpbiBwZXJmZWN0IGJhbGFuY2Ugb3Igc3RlYWRpLSAKbmVzcy4gSXQgaXMgd2VsbCB0aGF0IHRoZSBoaWdoIGZlZWxpbmdzIApzaG91bGQgY29tZSwgYW5kIHRoZSBtb3JlIHBvd2VyZnVsbHkgdGhleSAKY29tZSB0aGUgYmV0dGVyLCBidXQgdGhhdCBpcyBub3QgZW5vdWdoOyAKd2lzZG9tIGFuZCBzdGVhZGluZXNzIG11c3QgYWxzbyBiZSBhY3F1aXJlZCwgCmJlY2F1c2Ugd2UgbmVlZCBkaXJlY3RpbmcgcG93ZXIgYXMgd2VsbCAKYXMgbW90aXZlIGZvcmNlLiBUaGUgdmVyeSBtZWFuaW5nIG9mIApidWRkaGkgaXMgd2lzZG9tLCBhbmQgd2hlbiB0aGF0IGNvbWVzIAppdCBzd2FsbG93cyB1cCBhbGwgZWxzZS4uIAoKSWxsdW1pbmF0aW9uIG1heSBtZWFuIHRocmVlIHF1aXRlIGRpZi0gCmZlcmVudCB0aGluZ3MuIEZpcnN0LCBhIG1hbiwgYnkgc2V0dGluZyAKaGltc2VsZiB0byB0aGluayBpbnRlbnNlbHkgYW5kIHZlcnkgY2FyZS0gCmZ1bGx5IG92ZXIgYSBzdWJqZWN0IG1heSBhcnJpdmUgYXQgc29tZSAKY29uY2x1c2lvbiB3aXRoIHJlc3BlY3QgdG8gaXQuIFNlY29uZGx5LCBoZSAKbWF5IGhvcGUgdG8gb2J0YWluIHNvbWUgaWxsdW1pbmF0aW9uIGZyb20gCmhpcyBoaWdoZXIgc2VsZuKAlHRvIGRpc2NvdmVyIHdoYXQgdGhlIGVnbyAKcmVhbGx5IHRoaW5rcyBvbiBpdHMgb3duIHBsYW5lIGFib3V0IHRoZSAKbWF0dGVyIGluIHF1ZXN0aW9uLiBUaGlyZGx5LCBhIGhpZ2hseSBkZS0gCnZlbG9wZWQgbWFuIG1heSBjb21lIGludG8gdG91Y2ggd2l0aCAKTWFzdGVycyBvciBkZXZhcy4gSXQgaXMgb25seSBpbiB0aGUgZmlyc3QgCmNhc2UgdGhhdCBoaXMgY29uY2x1c2lvbnMgd291bGQgYmUgbGlrZWx5IHRvIAoKCjMzMCBBRFlBUiBUQUxLUyAKCgpiZSB2aXRpYXRlZCBieSBoaXMgb3duIHRob3VnaHQtZm9ybXMuIFRoZSAKaGlnaGVyIHNlbGYgd291bGQgYmUgYWJsZSB0byB0cmFuc2NlbmQgCnRoZXNlLCBhbmQgc28gd291bGQgYSBNYXN0ZXIgb3IgYSBkZXZhLiAKCkFsbCB0aGVzZSB3b3VsZCBoYXZlIG5vIGRpZmZpY3VsdHkgaW4gCnByZXNlbnRpbmcgdGhpbmdzIGFzIHRoZXkgcmVhbGx5IGFyZTsgYnV0IAp3ZSBtdXN0IHJlbWVtYmVyIHRoYXQgd2UgaGF2ZSBub3QgCm9ubHkgdG8gYWJzb3JiIHRoZSBpbmZvcm1hdGlvbiwgYnV0IAphbHNvIHRvIGJyaW5nIGl0IGRvd24gaW50byB0aGUgcGh5c2ljYWwgCmJyYWluLCBhbmQgYXMgc29vbiBhcyBpdCByZWFjaGVzIHRoYXQgYnJhaW4gCml0IHdpbGwgYmVnaW4gdG8gYmUgY29sb3VyZWQgYnkgcHJlanVkaWNlcy4gCldoYXQgd2UgY2FuIGRvIGluIG1lZGl0YXRpb24gZGVwZW5kcyAKdXBvbiB3aGF0IHdlIGFyZSBkb2luZyBhbGwgZGF5IGxvbmcuIElmIAp3ZSBoYXZlIGJ1aWx0IHVwIHByZWp1ZGljZXMgaW4gb3JkaW5hcnkgCmxpZmUgd2UgY2Fubm90IGVzY2FwZSBmcm9tIHRoZW0gZHVyaW5nIAp0aGUgdGltZSBvZiBtZWRpdGF0aW9uOyBidXQgaWYgd2UgcGF0aWVudGx5IAplbmRlYXZvdXIgdG8gcm9vdCBvdXQgb3VyIHByZWp1ZGljZXMgYW5kIAp0byBsZWFybiB0aGF0IHRoZSB3YXlzIG9mIG90aGVycyBhcmUganVzdCAKYXMgZ29vZCBhcyBvdXIgb3duLCB3ZSBhcmUgYXQgXyBsZWFzdCAKb24gb3VyIHdheSB0b3dhcmRzIGVzdGFibGlzaGluZyBhIGdlbnRsZSAKYW5kIHRvbGVyYW50IGF0dGl0dWRlIHdoaWNoIHdpbGwgYXNzdXJlZGx5IApleHRlbmQgaXRzZWxmIHRvIHRoZSBzcGVjaWFsIHRpbWUgb2Ygb3VyIAptZWRpdGF0aW9uLiBJdCBpcy4gZWFzeSBmb3IgdXMgdG8gc2VlIHRoZSAKZGlzYWR2YW50YWdlcyBvZiBhbnkgbmV3IGlkZWFzIG9yIHN1Z2dlc3QtIAppb25zOyB0aGVzZSBsZWFwIHRvIHRoZSBleWVzLiBCdXQgbG9vayBmb3IgCnRoZSBnb29kIGFsc28sIHdoaWNoIGRvZXMgbm90IGFsd2F5cyBzbyAKcmVhZGlseSBlbWVyZ2UuIAoKRHVyaW5nIG1lZGl0YXRpb24gdGhlIGVnbyByZWdhcmRzIHRoZSAKcGVyc29uYWxpdHkuIG11Y2ggYXMgYXQgYW55IG90aGVyIHRpbWXigJRoZSAKCgpNRURJVEFUSU9OIOKAlCAzMzEgCgoKaXMgc2xpZ2h0bHkgY29udGVtcHR1b3VzIHVzdWFsbHkuIFJlbWVtLSAKYmVyIHlvdXIgcGh5c2ljYWwgbWVkaXRhdGlvbiBpcyBub3QgZm9yIHRoZSAKZWdvLCBidXQgZm9yIHRoZSB0cmFpbmluZyBvZiB0aGUgdmFyaW91cyAKdmVoaWNsZXMgdG8gYmUgYS0gY2hhbm5lbCBmb3IgdGhlIGVnby4gSWYgCnRoZSBlZ28gaXMgYXQgYWxsIGRldmVsb3BlZCBoZSB3aWxsIG1lZGktIAp0YXRlIGFsc28gdXBvbiBoaXMgb3duIGxldmVsOyBidXQgaXQgZG9lcyAKbm90IGZvbGxvdyB0aGF0IGhpcyBtZWRpdGF0aW9uIHdpbGwgc3luLSAKY2hyb25pc2Ugd2l0aCB0aGF0IG9mIHRoZSBwZXJzb25hbGl0eS4gVGhlIApmb3JjZSBjb21pbmcgLmRvd24gaXMgYWx3YXlzIHRoYXQgb2YgdGhlIAplZ28sIGJ1dCBvbmx5IGEgc21hbGwgcGFydCwgZ2l2aW5nIGEgb25lLSAKc2lkZWQgY29uY2VwdGlvbiBvZiB0aGluZ3MuIFRoZSB5b2dhIG9mIGEgCmZhaXJseSB3ZWxsLWRldmVsb3BlZCBlZ28gaXMgdG8gdHJ5IHRvIHJhaXNlIApoaXMgY29uc2Npb3VzbmVzcyBmaXJzdCBpbnRvIHRoZSBidWRkaGljIApwbGFuZSBhbmQgdGhlbiB0aHJvdWdoIGl0cyB2YXJpb3VzIHN0YWdlcy4gCkhlIGRvZXMgdGhpcyB3aXRob3V0IHJlZmVyZW5jZSB0byB3aGF0IHRoZSAKcGVyc29uYWxpdHkgaGFwcGVucyB0by5iZSBkb2luZyBhdCB0aGUgdGltZS4gClN1Y2ggYW4gZWdvIHdvdWxkIHByb2JhYmx5IGFsc28gc2VuZCBkb3duIAphIGxpdHRsZSBvZiBoaW1zZWxmIGF0IHRoZSBwZXJzb25hbCBtZWRpdGEtIAp0aW9uLCB0aG91Z2ggaGlzIG93biBtZWRpdGF0aW9ucyBhcmUgdmVyeSAKZGlmZmVyZW50LiAKCkZvciAudGhlIGRldmVsb3BtZW50IG9mIHRoZSBwb3dlcnMgb2YgCnRoZSBzb3VsLCB0aG91Z2h0LWNvbnRyb2wgaXMgYW4gZXNzZW50aWFsIHByZS0gCnJlcXVpc2l0ZS4gV2hlbiB0aGUgdGhvdWdodCBpcyBjb250cm9sbGVkIAphbmQgdGhlIHdpbGwgaXMgc3Ryb25nIGEgZ29vZCBkZWFsIG1heSAKYmUgYWNoaWV2ZWQgaW4gdmFyaW91cyBkaXJlY3Rpb25zLiBNdWNoIGhlbHAgCm1heSBiZSBnaXZlbiBib3RoIHRvIHRoZSBodmluZyBhbmQgdG8gCnRoZSBkZWFkLCBhbmQgdGhvc2Ugd2hvIGFyZSBzaWNrIG9yIHNvcnJvdy0gCmZ1bCBtYXkgYmUgZ3JlYXRseSBoZWxwZWQgYW5kIHN0cmVuZ3RoZW5lZCwgCgoKMzMyIEFEWUFSIFRBTEtTIAoKCkl0LiBpcyB3ZWxsIGZvciBlYWNoIG1lbWJlciB0byBtYWtlIGl0IGEgCmRhaWx5IHByYWN0aWNlIHRvIGRldm90ZSBhIGNlcnRhaW4gdGltZSB0by0gCnRoZSBzZW5kaW5nIG91dCBvZiBzdWNoIHRob3VnaHRzIHRvIHBlb3BsZSAKd2hvIGFyZSBwZXJzb25hbGx5IGtub3duIHRvIGhpbeKAlGluIGFkZGktIAp0aW9uLCBJIG1lYW4sIHRvIHRoZSBvcmRpbmFyeSBtZWRpdGF0aW9uIAp3aGljaCBoZSB1bmRlcnRha2VzIGZvciB0aGUgc2FrZSBvZiBoaXMgCm93biBkZXZlbG9wbWVudC4gVGhlIHNhbWUgdGhpbmcgY2FuIGJlIApkb25lIHRvIHNvbWUgZXh0ZW50IGluIGdyb3VwIG1lZGl0YXRpb24gOyAuIAp0aGUgdGhvdWdodHMgb2YgYWxsIG1heSBiZSBjb25jZW50cmF0ZWQgZm9yIAphIGZldyBtaW51dGVzIHVwb24gc29tZSBvbmUgd2hvIGlzIGtub3duIAp0byBiZSBpbiB0cm91YmxlIG9yIHN1ZmZlcmluZywgYW5kIGEgZGV0ZXItIAptaW5lZCBlZmZvcnQgbWFkZSB0byBzZW5kIHN0cmVuZ3RoIGFuZCAKY29uc29sYXRpb24uIFRoZSBzYW1lIHBvd2VyIHVzZWQgaW4gYSBkaWYtIApmZXJlbnQgd2F5IHdpbGwgb2Z0ZW4gY3VyZSBwaHlzaWNhbCBkaXNlYXNlcy4gCgpBcyB0byB0aGUgZGV2ZWxvcG1lbnQgb2YgYXN0cmFsIHNpZ2h0IAphbmQgaGVhcmluZywgb25lIGhhcmRseSByZWdhcmRzIHRoYXQgYXMgYW4gCmVuZCBpbiBpdHNlbGYsIGJ1dCByYXRoZXIgYXMgYSBtZWFucyB0byBhbiAKZW5kLiBJdCBzZWVtcyBiZXN0IHRvIHV0aWxpc2UgdG8gdGhlIHV0bW9zdCAKYWxsIHRoZSBwb3dlcnMgdGhhdCB3ZSBhbHJlYWR5IHBvc3Nlc3MsIAphbmQgLiB3YWl0IGZvciB0aGVzZSBvdGhlcnMgdG8gdW5mb2xkIHRoZW0tIApzZWx2ZXMgYXMgdGhlIHJlc3VsdCBvZiBzdHVkeSBhbmQgdW5zZWxmaXNoIAp3b3JrLiBTdWNoIHBvd2VycyBhcmUgdW5kb3VidGVkbHkgYSBoZWxwLCAKdGhvdWdoIHRoZXkgbWF5IGJlIGFkYW5nZXIgaWYgdGhleSBjb21nLSAKYmV0b3JlIHRoZSBjaGFyYWN0ZXIgaXMgZnVsbHkgZGV2ZWxvcGVkLiDigJxvciAKYW55IG9uZSB3aG8gd2lzaGVzIHRvIGhhc3RlbiB0aGVpciB1bmZvbGQtIAptZW50IEkgc2hvdWxkIHJlY29tbWVuZCB0aGUgcHJvY2VzcyB3aGljaCAKSSBkZXNjcmliZSBpbiB0aGUgbGFzdCBjaGFwdGVyIG9mIFRoZSBPdGhlciAKU2lkZSBvZiBEZWF0aC4gCgoKTUVESVRBVElPTiAzMzMgCgoKV2hlcmUgYSBob3VzZSBpcyBsYXJnZSBlbm91Z2ggdG8gcGVybWl0IAppdCwgaXQgMXMgYSBnb29kIGlkZWEgdG8gc2V0IGFwYXJ0IGEgcm9vbSAKZXNwZWNpYWxseSBmb3IgbWVkaXRhdGlvbi4gSSBzZWUgbm8gaGFybSAKaW4gaG9sZGluZyBncm91cC1tZWV0aW5ncyBpbiBzdWNoIGEgcm9vbSAK4oCYaWYgdGhlIGdyb3VwIGJlIGVhcm5lc3QgYW5kIGhhcm1vbmlvdXMsIApidXQgbm90IGlmIHRoZXJlIGlzIHRvIGJlIGFueXRoaW5nIG9mIHRoZSAKbmF0dXJlIG9mIGRpc2N1c3Npb24gb3Igd3JhbmdsaW5nLiBJZiB5b3UgCmFyZSB0cnlpbmcgZXhwZXJpbWVudHMgd2l0aCBtZWRpdW1zIG9mIGFueSAKc29ydCBJIHNob3VsZCBhZHZpc2UgdGhlIHVzZSBvZiBzb21lIG90aGVyIApyb29tLiBZb3UgYXNrIHdoZXRoZXIgeW91IHNob3VsZCBlbnRlciAKc3VjaCBhIHJvb20gd2hlbiB5b3UgZmVlbCB3b3JyaWVkOyBkb27igJl0IApiZSB3b3JyaWVkLCBkb27igJl0IGV2ZW4gYWRtaXQgdGhlIHBvc3NpYmlsaXR5IApvZiBiZWluZyB3b3JyaWVkLiBJIGFkdmlzZSB5b3Ugbm90IHRvIG1ha2UgCmEgdGhvdWdodC1mb3JtLCDigJhJIGFtIHdvcnJpZWQsIHRoZXJlZm9yZSAKSSBtdXN0IG5vdCBlbnRlcizigJkgYnV0IHJhdGhlciB0byB0YWtlIGV4LSAKYWN0bHkgdGhlIG9wcG9zaXRlIGxpbmUsIOKAnEkgYW0gYWJvdXQgdG8gCmVudGVyLCB0aGVyZWZvcmUgSSBhbSBubyBsb25nZXIgd29ycmllZC7igJ0gCllvdSB3aWxsIGZpbmQgdGhhdCBtdWNoIG1vcmUgZWZmZWN0aXZlLiAKCgpGb2V1cnRoIFNlY3Rpb24gCgoKQGhlIERpZ2hlciBQbGFuZXMgCgoKRk9VUlRIIFNFQ1RJT04gCsKwIE5JUlZBTkEgCgoKSXQgaGFzIG9mdGVuIGJlZW4gc2FpZCB0aGF0IGltIHRoZSBmaW5hbCAKY29uc3VtbWF0aW9uIGFsbCBpbmRpdmlkdWFsIHNvdWxzIG1lcmdlIG10byAKdGhlIEdyZWF0IFNvdWwsIGFuZCBvdXIgc3R1ZGVudHMgc29tZXRpbWVzIApmaW5kIGl0IGRpZmZpY3VsdCB0byByZWNvbmNpbGUgdGhpcyB3aXRoIG90aGVyIApzdGF0ZW1lbnRzIHdoaWNoIHNlZW0gdG8gaW1wbHkgdGhhdCB0aGUgCmluZGl2aWR1YWxpdHkgaXMgbWFpbnRhaW5lZCwgaW4gc29tZSBmb3JtIApvciBvdGhlciwgZXZlbiB1cCB0byB0aGUgdmVyeSBncmVhdGVzdCAKaGVpZ2h0cy4g4oCYVGhlIGZhY3QgaXMgdGhhdCBubyBleHBlcmllbmNlIAp3aGljaCB3ZSBjYW4gaGF2ZSwgYW5kIG5vIGlkZWFzIHdoaWNoIHdlIApjYW4gZm9ybXVsYXRlIGRvd24g4oCYaGVyZSBpbiBvdXIgcGh5c2ljYWwgCmJyYWluLCB3aWxsIGF0IGFsbCBleHByZXNzIHRoZSBnbG9yaW91cyByZWFsLSAKaXRpZXMgb2YgbWlydmFuYSBhbmQgdGhlIHBsYW5lcyBiZXlvbmQgaXQuIApXZSBrbm93IHNvIGhpdHRsZSBvZiB0aGF0IHRyYW5zY2VuZGVudCAKZ2xvcnksIGFuZCB3aGF0IGxpdHRsZSB3ZSBkbyBrbm93IGNhbiAKbmV2ZXIgYmUgcHV0IGludG8gYWRlcXVhdGUgd29yZHMuIFBlcmhhcHMsIApob3dldmVyLCBpdCAxUyAxbiBhIGNlcnRhaW4gc2Vuc2Ugc29tZXdoYXQgCm1pc2xlYWRpbmcgdG8gc3BlYWsgb2YgaW5kaXZpZHVhbCBzb3VscyBhcyAKCgptZXJnaW5nIGludG8gdGhlIEdyZWF0IFNvdWwuIEV2ZXJ5IG1vbmFkIAo0MyAKCgrigJgzMzggQURZQVIgVEFMS1MgCgoKaXMgZnVuZGFtZW50YWxseSDCq2Egc3Bhcmsgb2YgdGhlIGRpdmluZSAKdHJpYWQ7IGhlIGNhbm5vdCBtZXJnZSBpbnRvIHRoYXQgb2Ygd2hpY2ggCmhlIGlzIGFscmVhZHkgYSBwYXJ0LiBTdXJlbHkgYSBiZXR0ZXIgZXgtIApwbGFuYXRpb24gb2Ygd2hhdCBoYXBwZW5zIHdvdWxkIGJlIHRvIHNheSAKdGhhdCBhcyBoZSBldm9sdmVzIHRoZSBzcGFyayBkZXZlbG9wZXMgaW50b18gCmZsYW1lOyBoZSBiZWNvbWVzIG1vcmUgYW5kIG1vcmUgY29uc2Npb3VzIApvZiBoaXMgdW5pdHkgd2l0aCB0aGUgZGl2aW5lLCBhbmQgc28gdGhlIApMb2NvcyBpcyBhYmxlIG1vcmUgYW5kIG1vcmUgdG8gbWFuaWZlc3QgCkhpbXNlbGYgdGhyb3VnaCBoaW0uIAoKVGhpcyBtdWNoIGF0IGxlYXN0IEkgY2FuIHNheSwgdGhhdCB1cCAKdG8gdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgY29uc2Npb3VzbmVzcyAKd2hpY2ggYW55IG9mIG91ciBzdHVkZW50cyBoYXZlIHlldCBhdHRhaW5lZCAK4oCUdXAgZXZlbiB0byB3aGF0IGlzIGNvbW1vbmx5IGNhbGxlZCAKbmlydmFuYSBpdHNlbGYsIHRoZXJlIGlzIG5vIGxvc3Mgb2YgaW5kaXZpZC0gCnVhaGl0eSwgb2YgdGhlIHBvd2VyIHRvIHRoaW5rLCB0byBwbGFuIAp1bmQgdG8gYWN0LiBMb25nIGJlZm9yZSB0aGF0IHRoZXJlIGlzIGFuIAplbnRpcmUgbG9zcyBvZiB0aGUgc2Vuc2Ugb2Ygc2VwYXJhdGVuZXNzLCBidXQgCnRoYXQgaXMgYSB2ZXJ5IGRpZmZlcmVudCB0aGluZy4gU2lyIEVkd2luIApBcm5vbGQgd3JvdGUgb2YgdGhhdCBiZWF0aWZpYyBjb25kaXRpb24gdGhhdCAK4oCcdGhlIGRld2Ryb3Agc2hwcyBpbXRvIHRoZSDigJQgc2hpbmluZyAKc2VhLuKAmSBUaG9zZSB3aG8gaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGF0IAptb3N0IG1hcnZlbGxvdXMgb2YgZXhwZXJpZW5jZXMga25vdyB0aGF0LCAKcGFyYWRveGljYWwgYXMgaXQgbWF5IHNlZW0sIHRoZSBzZW5zYXRpb24gaXMgCmV4YWN0bHkgdGhlIHJldmVyc2UsIGFuZCB0aGF0IGEgZmFyIGNsb3NlciAKZGVzY3JpcHRpb24gd291bGQgYmUgdGhhdCB0aGUgb2NlYW4gCmhhZCBzb21laG93IGJlZW4gcG91cmVkIGludG8gdGhlIGRyb3AhIAoKVGhhdCBjb25zY2lvdXNuZXNzLCB3aWRlIGFzIHRoZSBzZWEsIAp3aXRoIOKAmGl0cyBjZW50cmUgZXZlcnl3aGVyZSBhbmQgaXRzIGNpci0gCgoKTklSVkFOQSAzMDkgCgoKY3VtZmVyZW5jZSBub3doZXJl4oCdIGlzIGEgZ3JlYXQgYW5kIGdsb3JpLSAKb3VzIGZhY3Q7IGJ1dCB3aGVuIGEgbWFuIGF0dGFpbnMgaXQsIGl0IApzZWVtcyB0byBoaW0gdGhhdCBoaXMgY29uc2Npb3VzbmVzcyBoYXMgCndpZGVuZWQgdG8gdGFrZSBpbiBhbGwgdGhhdCwgbm90IHRoYXQgaGUgaXMgCm1lcmdlZCBpbnRvIHNvbWV0aGluZyBlbHNlLiBBbmQgaGUgaXMgCnJpZ2h0LCBmb3IgdGhhdCB3aGljaCBoZSBoYWQgaWdub3JhbnRseSAKc3VwcG9zZWQgdG8gYmUgZmlzIGNvbnNjaW91c2hlc3Mgd3VzIG5ldmVyIApoaXMgYXQgYWxsLCBidXQgb25seSB0aGUgc2hpbm1lIG9mIHRoZSAKZGl2bWUgcG93ZXIgYW5kIHdpc2RvbSBhbmQgbG92ZSB0aHJvdWdoIApoaW0sIGFuZCBoZSBpcyBub3cgYXQgbGFzdCBiZWduaW5pbmcgdG8gCnJlYWxpc2UgdGhhdCBzdHVwZW5kb3VzIGZhY3QuIFRoZSB0cnV0aCBpcyAKdGhhdCB3aGF0IGlzIGNvbW1vbmx5IHVuZGVyc3Rvb2QgYnkgaW4tIApkaXZpZHVhaHR5IGlzIGEgZGVsdXNpb24gYW5kIGhhcyBuZXZlciAKZXhpc3RlZCwgYnV0IGFsbCB0aGF0IGlzIGJlc3QgYW5kIG5vYmxlc3QgaW0gCnRoYXQgY29uY2VwdGlvbiBpcyBtYWludGFpbmVkIHVwIHRvIGFkZXB0LSAKc2hpcCBhbmQgZmFyIGJleW9uZCwgZXZlbiBpbnRvIHRoZSByZWFsbSAKb2YgdGhlIGdyZWF0IFBsYW5ldGFyeSBTcGlyaXRzLCBmb3IgVGhleSBhcmUgCmFzc3VyZWRseSBpbmRpdmlkdWFscywgdGhvdWdoIG1pZ2h0eSBiZXlvbmQgCm91ciBmZWVibGUgcG93ZXJzIG9mIGNvbmNlcHRpb24uIAoKRXZlbiB0aG91Z2ggdGhlIGF0dGVtcHQgYmUgZm9yZWRvb21lZCB0byAKZmFpbHVyZSwgbGV0IG1lIGVuZGVhdm91ciB0byBnaXZlIHNvbWUgc2xpZ2h0IAppZGVhIG9mIGFuIGV4cGVyaWVuY2Ugd2hpY2ggc29tZSBvZiB1cyBvbmNlIApoYWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgbG9mdHkgcGxhbmUuIEJlZm9yZSAKd2Ugb3Vyc2VsdmVzIGJ5IG91ciBvd24gZWZmb3J0cyB3ZXJlIGFibGUgCnRvIHRvdWNoIGl0LCBhIE1hc3RlciwgZm9yIGNlcnRhaW4gcHVycG9zZXMgCm9mIEhpcyBvd24sIGVuZm9sZGVkIHVzIGluIEhpc18gaGlnaGVyIAphdXJhLCBhbmQgZW5hYmxlZCB1cyB0aHJvdWdoIEhpbSB0byBrbm93IApzb21ldGhpbmcgb2YgdGhlIGdsb3JpZXMgb2YgbmlydmFuYS4gCgoKMzQwIEFEWUFSIFRBTEtTIAoKClRyeSB0byBpbWFnaW5lIHRoZSB3aG9sZSB1bml2ZXJzZSAKZmlsbGVkIHdpdGggYW5kIGNvbnNpc3Rpbmcgb2YgYW4gaW1tZW5zZSAKdG9ycmVudCBvZiBsaXZpbmcgbGlnaHQsIGFuZCBpbSBpdCBhIHZpdmlkLSAKbmVzcyBvZiBsaWZlIGFuZCBhbiBpbnRlbnNpdHkgb2YgYmxpc3MgYWwtIAp0b2dldGhlciBiZXlvbmQgYWxsIGRlc2NyaXB0aW9uLCBhIGh1bmRyZWQgCnRob3VzYW5kIHRpbWVzIGJleW9uZCB0aGUgZ3JlYXRlc3QgYmxpc3Mgb2YgCmhlYXZlbi4gQXQgZmlyc3Qgd2UgZmVlbCBub3RoaW5nIGJ1dCAKdGhlIGJsaXNzOyB3ZSBzZWUgbm90aGluZyBidXQgdGhlIGludGVuc2l0eSAKb2YgdGhlIGxnaHQ7IGJ1dCBncmFkdWFsbHkgd2UgYmVnaW4gdG8gCnJlYWxpc2UgdGhhdCBldmVuIGluIHRoaXM6IGRhenpsaW5nIGJyaWdodG5lc3MgCnRoZXJlIGFyZSBicmlnaHRlciBzcG90c+KAlG51Y2xlbCwgYXMgaXQgd2VyZSAK4oCUd2xpY2ggYXJlIGJ1bHQgb2YgdGhlIGxnaHQgYmVjYXVzZSAKdGhlcmUgaXMgbm90aGluZyBidXQgdGhlIGhnaHQsIGFuZCB5ZXQgCnRocm91Z2ggdGhlbSBzb21laG93IHRoZSBsaWdodCBnbGVhbXMgb3V0IAptb3JlIGJyaWdodGx5LCBhbmQgb2J0YWlucyBhIG5ldyBxdWFsaXR5IAp3aGljaCBjbmFibGVzIGl0IHRvIGJlIHBlcmNlcHRpYmxlIHVwb24gb3RoZXIgCmFuZCBKb3dlciBwbGFuZXMsIHdoaWNoIHdpdGhvdXQgdGhpcyB3b3VsZCAKYmUgYWx0b2dldGhlciBiZW5lYXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBzZW5zLSAKaW5nIGl0cyBlZmZ1bGdlbmNlLiBBbmQgYnkgZGVncmVlcyB3ZSAKYmVnaW4gdG8gcmVhbGlzZSB0aGF0IHRoZXNlIHN1YnNpZGlhcnkgCnN1bnMgYXJlIHRoZSAoR3JlYXQgT25lcywgdGhhdCB0aGVzZSBhcmUgClBsYW5ldGFyeSBTcGlyaXRzLCBHcmVhdCBBbmdlbHMsIEthcm1pYyAKRGVpdGllcywgQnVkZGhhcywgQ2hyaXN0cyBhbmQgTWFzdGVycywgYW5kIAp0aGF0IHRocm91Z2ggVGhlbSB0aGUgbGlnaHQgYW5kIHRoZSBsaWZlIAphcmUgZmxvd2luZyBkb3duIHRvIHRoZSBsb3dlciBwbGFuZXMuIApHcmFkdWFsbHksIGxpdHRsZSBieSBsaXR0bGUsIGFzIHdlIGJlY29tZSBtb3JlIAphY2N1c3RvbWVkIHRvIHRoZSBzdHVwZW5kb3VzIHJlYWxpdHksIHdlIGJlZ2luIAp0diBzZWUgdGhhdCwgaW4gYSBmYXIgbG93ZXIgc2Vuc2UsIGV2ZW4gd2UgCgoKTklSVkFOQSAzNCkgCgoKb3Vyc2VsdmVzIGFyZSBhIGZvY3VzIGluIHRoYXQgY29zbWljIHNjaGVtZSwgCmFuZCB0aGF0IHRocm91Z2ggdXMgYWxzbywgYXQgb3VyIG11Y2ggbG93ZXIgCmxldmVsLCB0aGUgbGlnaHQgYW5kIHRoZSBsaWZlIGFyZSBmbG93aW5nIHRvIAp0aG9zZSB3aG8gYXJlIHN0aWxsIGZ1cnRoZXIgYXdheeKAlG5vdCBmcm9tIAppdCwgZm9yIHdlIGFyZSBhbGwgcGFydCBvZiBpdCBhbmQgdGhlcmUgaXMgCm5vdGhpbmcgZWxzZSBhbnl3aGVyZeKAlGJ1dCBmdXJ0aGVyIGZyb20gdGhlIApyZWFsaXNhdGlvbiBvZiBpdCwgdGhlIGNvbXByZWhlbnNpb24gb2YgaXQsIAp0aGUgZXhwZXJpZW5jZSBvZiBpdC4gCgpJZiB3ZSBjYW4gc2VlIGFuZCBncmFzcCBldmVuIGEgbGl0dGxlIG9mIHRoZSAKZ2xvcnksIHdlIGNhbiB0byBzb21lIGV4dGVudCByZWZsZWN0IGl0IHRvIApvdGhlcnMgd2hvIGFyZSBsZXNzIGZvcnR1bmF0ZS4gVGhhdCBsZ2h0IApzaGluZXMgZm9yIGV2ZXJ5IG9uZSwgYW5kIGl0IGlzIHRoZSBvbmx5IHJlYWxpdHkgOyAKeWV0IG1lbiBieSB0aGV3IGlnbm9yYW5jZSBhbmQgYnkgdGhlaXIgCmZvb2xpc2ggYWN0aW9ucyBtYXkgc28gc2h1dCB0aGVtc2VsdmVzIGF3YXkgCnRoYXQgdGhleSBjYW5ub3Qgc2VlIGl0LCBKdXN0IGFzIHRoZSBzdW4gZmxvb2RzIAp0aGUgd2hvbGUgd29ybGQgd2l0aCBsaWdodCBhbmQgbGlmZSwgYW5kIHlldCAKbWVuIG1heSBoaWRlIHRoZW1zZWx2ZXMgaW0gY2F2ZXMgYW5kIGNlbGxhcnMgCndoZXJlIHRoYXQgbGhnaHQgY2Fubm90IGJlIHNlZW4uIEp1c3QgYXMgCmEgbWlycm9yIHByb3Blcmx5IHBsYWNlZCBhdCB0aGUgbW91dGggb2YgCnN1Y2ggYSBjYXZlIG9yIGNlbGxhciBtYXkgZW5hYmxlIHRob3NlIAp3aXRoaW4gdG8gcGFydGljaXBhdGUsIGF0IGxlYXN0IHRvIHNvbWUgZXh0ZW50LCAKaW4gdGhlIGJlbmVmaXRzIG9mIHRoZSBsaGdodCwgc28gbWF5IHdlLCAKd2hlbiB3ZSBzZWUgdGhlIGxoZ2h0LCByZWZsZWN0IGl0IHRvIG90aGVycyAKd2hvIGhhdmUgc28gcGxhY2VkIHRoZW1zZWx2ZXMgdGhhdCB0aGV5IApjYW5ub3QgcGVyY2VpdmUgaXQgZGlyZWN0bHkuIAoKTm8gd29yZHMgdGhhdCB3ZSBjYW4gdXNlIGNhbiByZWFsbHkgCmdpdmUgZXZlbiB0aGUgbGVhc3QgaWRlYSBvZiBzdWNoIGFuIGV4cGVyaWVuY2UgCmFzIHRoYXQsIGZvciBhbGwgd2l0aCB3aGljaCBvdXIgbWluZHMgYXJlIAoKCjM0MiBBRFlBUiBUQUxLUyAKCgphY3F1YWludGVkIGhhcyBsb25nIGFnbyBkaXNhcHBlYXJlZCBiZWZvcmUgCnRoYXQgbGV2ZWwgaXMgYXR0YWluZWQuIFRoZXJlIGlzIG9mIGNvdXJzZSAKYXQgdGhhdCBsZXZlbCBhIHNoZWF0aCBvZiBzb21lIHNvcnQgZm9yIHRoZSAKc3Bpcml0LCBidXQgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXNjcmliZSBpdCAKaW4gYW52IHdvcmRzLiBJbiBvbmUgc2Vuc2UgaXQgc2NlbXMgYXMgCnRob3VnaCBpdCB3ZXJlIGFuIGF0b20sIGFuZCB5ZXQgaW4gYW5vdGhlciAKaXQgc2VlbXMgdG8gYmUgdGhlIHdob2xlIHBsYW5lLiBIYWNoIG1hbiAKaXMgYSBjZW50cmUgb2YgY29uc2Npb3VzbmVzcyBhbmQgdGhlcmVmb3JlIAptdXN0IGhhdmUgc29tZSBwb3NpdGlvbjsgdGhhdCBmb2N1cyBpbSB0aGUgCnN0cmVhbSBvZiB0aGUgbGlmZSBvZiB0aGUgTG9jb3MgbXVzdCwgCm9uZSB3b3VsZCBzYXksIGJlIGluIG9uZSBwbGFjZSBvciBhbm90aGVyLiAKWWV0IGhlIGZlZWxzIGFzIGlmIGhlIHdlcmUgdGhlIHdob2xlIHBsYW5lIAphbmQgY291bGQgZm9jdXMgYW55d2hlcmUsIGFuZCB3aGVyZXZlciAKZm9yIHRoZSBtb21lbnQgdGhlIG91dHBvdXJpbmcgb2YgdGhpcyBmb3JjZSAKc3RvcHMsIHRoYXQgaXMgZm9yIGhpbSBhIHNoZWF0aC4gVGhlIG1hbiAKc3RpbGwgZmVlbHMgYWJzb2x1dGVseSBoaW1zZWxmLCBldmVuIHRob3VnaCAKaGUgaXMgc28uIG11Y2ggbW9yZTsgYW5kIGhlIHcgYWJsZSB0byAKZGlzdGluZ3Vpc2ggb3RoZXJzLiBIZSBpcyBhYmxlIHRvIHJlY29nbmlzZSAKd2l0aCBwZXJmZWN0IGNlcnRhaW50eSB0aGUgR3JlYXQgT25lcyB3aG9tIApoZSBrbm93cywgeWV0IGl0IGlzIHJhdGhlciBieSBpbnN0aW5jdGl2ZSBmZWVsaW5nIAp0aGFuIGJ5IGFueSByZXNlbWJsYW5jZSB0byBhbnl0aGluZyB0aGF0IApoZSBoYXMgc2VlbiBiZWZvcmU7IGJ1dCBpZiBoZSBmb2N1c3NlcyBoaXMgCmNvbnNjaW91c25lc3MgdXBvbiBvbmUgb2YgVGhlc2UgaGUgXyBnZXRzIAp0aGUgZWZmZWN0IG9mIHRoZSBmb3JtIG9mIHRoZSBtYW4gYXMgaGUgCmtub3dzIGl0IGluIHRoZSBBdWdvZWlkZXMsIHR3byBwbGFuZXMgYmVsb3cuIAoKClRIRSBUUklQTEUgU1BJUklUIDM0MyAKCgpUdWUgVFJJUExFIFNQSVJJVCAKCgpUaGUgTW9uYWRzIGFyZSBjbGVhcmx5IGFsbCBjZW50cmVzIG9mIApmb3JjZSBpbiB0aGUgTG9jb3MsIGFuZCB5ZXQgZWFjaCBwb3NzZXNzZXMgCuKAmGEgdmVyeSBkaXN0aW5jdC4gaW5kaXZpZHVhbGl0eSBvZiBoaXMgb3duLiBJbiAKdGhlIGF2ZXJhZ2UgbWFuIHRoZSBtb25hZCBpcyBidXQgbGl0dGxlIAppbiB0b3VjaCB3aXRoIHRoZSBlZ28gYW5kIHRoZSBsb3dlciBwZXItIApzb25hbGl0eSwgd2hpY2ggYXJlIHlldCBzb21laG93IGV4cHJlc3MtIAppb25zIG9mIGhpbS4tIEhlIGtub3dzIGZyb20gdGhlIGZpcnN0IAp3aGF0IGlzIGhpcyBvYmplY3QgaW4gZXZvbHV0aW9uIGFuZCBoZSAKZ3Jhc3BzIHRoZSBnZW5lcmFsIHRyZW5kIG9mIGl0LCBidXQgCnVudGlsIHRoYXQgcG9ydGlvbiBvZiBoaW0gd2hpY2ggZXhwcmVzc2VzIAppdHNlbGYgaW4gdGhlIGVnbyBoYXMgcmVhY2hlZCBhIGZhaXJseSBoaWdoIApzdGFnZSwgaGUgaXMgc2NhcmNlbHkgY29uc2Npb3VzIG9mIHRoZSAKZGV0YWlscyBvZiBsaWZlIGRvd24gaGVyZSwgb3IgYXQgYW55IHJhdGUgCnRha2VzIGxpdHRsZSBpbnRlcmVzdCBpbiB0aGVtLiBIZSBzZWVtcyBhdCAKdGhhdCBzdGFnZSBub3QgdG8ga25vdyBvdGhlciBtb25hZHMsIGJ1dCAKcmVzdHMgaW4gaW5kZXNjcmliYWJsZSBibGlzcyB3aXRob3V0IGFueSBhY3RpdmUgCmNvbnNjaW91c25lc3Mgb2Ygc3Vycm91bmRpbmdzLiBBcyBldm9sdXRpb24gCnByb2dyZXNzZXMsIGhvd2V2ZXIsIGhlIGdyYXNwcyBtYXR0ZXJzIG9uIAp0aGUgbG93ZXIgcGxhbmUgbXVjaCBtb3JlIGZ1bGx5LCBhbmQgZmluYWxseSAKdGFrZXMgdGhlbSBlbnRpcmVseSBpbnRvIGhpcyBvd24gaGFuZHMsIGFuZCAKYXQgdGhhdCBzdGFnZSBoZSBrbm93cyBib3RoIGhpbXNlbGYgYW5kIApvdGhlcnMsIGFuZCBoaXMgdm9pY2Ugd2l0aGluIHVzIGJlY29tZXMgZm9yIAp1cyB0aGUgVm9pY2Ugb2YgdGhlIFNpbGVuY2UuIFRoYXQgdm9pY2UgCmRpZmZlcnMgZm9yIHVzIGF0IGRpZmZlcmVudCBzdGFnZXMuIEZvciB1cyAKbm93IGluIHRoaXMgbG93ZXIgY29uc2Npb3VzbmVzcyBpdCBpcyB0aGUgCnZvaWNlIG9mIHRoZSBlZ287IHdoZW4gd2UgaWRlbnRpZnkgb3Vyc2VsdmVzIAoKCjM0NDogQURZQVIgVEFMS1MgCgoKd2l0aCB0aGUgZWdvIGl0IGlzIHRoZSB2b2ljZSBvZiB0aGUgCnNwaXJpdDsgd2hlbiB3ZSByZWFjaCB0aGUgc3Bpcml0IGl0IGlzIHRoZSAKdm9pY2Ugb2YgdGhlIG1vbmFkLCBhbmQgd2hlbiBpbiB0aGUgZmFyLSAKYXdheSBmdXR1cmUgd2UgaWRlbnRpZnkgb3Vyc2VsdmVzIHdob2xseSAKd2l0aCB0aGUgbW9uYWQgaXQgd2lsbCBiZSB0aGUgdmVpY2Ugb2YgdGhlLSAKTG9jb3M7IGJ1dCBpbiBldmVyeSBjYXNlIHdlIGhhdmUgdG8gc3ViLSAKamVjdCB0aGUgbG93ZXIgYW5kIHJpc2UgYWJvdmUgaXQsIGJlZm9yZSB0aGUgCnZvaWNlIG9mIHRoZSBoaWdoZXIgY2FuIGJlIGhlYXJkLiAKCmhpcyBtb25hZCByZXNpZGVzIHBlcm1hbmVudGx5IHVwb24gCnRoZSBzZWNvbmQgb2Ygb3VyIHBsYW5lcywgYW5kIHdoZW4gaGUgZGUtIApzY2VuZHMgdXBvbiB0aGUgdGhpcmQsIHRoZSBwbGFuZSBvZiBuaXJ2YW5hLCAKaGUgbWFuaWZlc3RzIGhpbXNlbGYgYXMgdGhlIHRyaXBsZSBzcGlyaXQsIGFuZCAKdGhzIHRyaXBsZSBzcGlyaXQgaXMgYSByZWZsZWN0aW9uIG9yIChldmVuIAptb3JlIHRydWx5KSBhbiBleHByZXNzaW9uIG9mIHRoZSBMb3VvcyBhcyAKSGUgbWFuaWZlc3RzIEhpbXNlbGYgaW4gb3VyIHNldCBvZiBwbGFuZXMuIApIaXMgZmlyc3QgbWFuaWZlc3RhdGlvbiBvbiBvdXIgaGlnaGVzdCBwbGFuZSAKaXMgYWxzbyB0cmlwbGUuIEluIHRoZSBmaXJzdCBvZiB0aGVzZSB0aHJlZSAKYXNwZWN0cyBIZSBkb2VzIG5vdCBtYW5pZmVzdCBIaW1zZWxmIG9uIAphbnkgcGxhbmUgYmVsb3cgdGhlIEluZ2hlc3QsIGJ1dCBpbiB0aGUgCnNlY29uZCBIZSBkZXNjZW5kcyB0byB0aGUgc2Vjb25kIHBsYW5lIAphbmQgZHJhd3Mgcm91bmQgSGltc2VsZiBhIGdhcm1lbnQgb2YgCml0cyBtYXR0ZXIsIHRodXMgbWFraW5nIGEgcXVpdGUgc2VwYXJhdGUgCmV4cHJlc3Npb24gb2YgSGltLiBJbiB0aGUgdGhpcmQgYXNwZWN0IArigJxIZSBkZXNjZW5kcyB0byB0aGUgdXBwZXIgcG9ydGlvbiBvZiB0aGUgCnRoaXJkIHBsYW5lLCBhbmQgZHJhd3Mgcm91bmQgSGltc2VsZiAKbWF0dGVyIG9mIHRoYXQgbGV2ZWwsIHRodXMgbWFraW5nIGFfIHRoaXJkIAptYW5pZmVzdGF0aW9uLiBUaGVzZSB0aHJlZSBhcmUgdGhlIOKAnHRocmVlIApwZXJzb25zIGluIG9uZSBHb2Qs4oCdIG9mIHdoaWNoIENocmlzdGlhbml0eSAKCgpUSEUgVFJJUExFIFNQSVJJVCAzNDUgCgoKdGVhY2hlcywgdGVsbGluZyB1cyBpbiBpdHMgQXRoYW5hc2lhbiBjcmVlZCAKdGhhdCB3ZSBzaG91bGQgd29yc2hpcCDigJxPbmUgR29kIGluIApUcmluaXR5IGFuZCBUcmluaXR5IGluIFVuaXR5LCBuZWl0aGVyIGNvbi0gCmZvdW5kaW5nIHRoZSBwZXJzb25zIG5vciBkaXZpZGluZyB0aGUgc3ViLSAKc3RhbmNl4oCd4oCZ4oCUdGhhdCBpcyB0byBzYXksIG5ldmVyIGNvbmZ1c2luZyAKaW4gb3VyIG1pbmRzIHRoZSB3b3JrIGFuZCBmdW5jdGlvbiBvZiAKdGhlIHRocmVlIHNlcGFyYXRlIG1hbmlmZXN0YXRpb25zLCBlYWNoIG9uIAppdHMgb3duIHBsYW5lLCB5ZXQgbmV2ZXIgZm9yIGEgbW9tZW50IApmb3JnZXR0aW5nIHRoZSAuZXRlcm5hbCB1bml0eSBvZiB0aGUg4oCcc3ViLSAKc3RhbmNlLOKAnSB0aGF0IHdoaWNoIGxpdmVzIGJlaGluZCBhbGwgYWxpa2UgCm9uIHRoZSBoaWdoZXN0IHBsYW5lLCBhdCB0aGUgbGV2ZWwgd2hlcmUgCnRoZXNlIHRocmVlIGFyZSBvbmUuIAoKTm93IGFuIGV4YWN0IHJlcGV0aXRpb24gb2YgdGhpcyBwcm9jZXNzIAp0YWtlcyBwbGFjZSBpbiB0aGUgY2FzZSBvZiBtYW4sIHdobyBpcyAKaW4gdmVyeSB0cnV0aCBtYWRlIGluIHRoZSBpbWFnZSBvZiBHb2QuIApUaGUgc3Bpcml0IGlzIHRtcGxlIHVwb24gdGhlIHRoaXJkIHBsYW5lLCAKYW5kIHRoZSBmaXJzdCBvZiBpdHMgdGhyZWUgbWFuaWZlc3RhdGlvbnMgCmRvZXMgbm90IGRlc2NlbmQgYmVsb3cgdGhhdCBsZXZlbC4gVGhlIApzZWNvbmQgbWFuaWZlc3RhdGlvbiBkZXNjZW5kcyBvbmUgXyBzdGFnZSwgCm9uIHRvIHRoZSBmb3VydGggcGxhbmUsIGFuZCBjbG90aGVzIGl0c2VsZiAKd2l0aCBpdHMgbWF0dGVyLCBhbmQgdGhlbiB3ZSBjYWxsIGl0IGJ1ZGRoaS4gCkp1c3QgYXMgYmVmb3JlLCB0aGUgdGhpcmQgYXNwZWN0IGRlc2NlbmRzIAp0d28gcGxhbmVzLCBhbmQgc2hyaW5lcyBpdHNlbGYgaW4gbWF0dGVyIG9mIAp0aGUgaGlnaGVzdCBsZXZlbCBvZiB0aGUgbWVudGFsIHBsYW5lLCBhbmQgCndlIGNhbGwgdGhhdCBtYW5hcywgYW5kIHRoaXMgdHJpbml0eSBvZiAKYXRtYS1idWRkaGktbWFuYXMsIG1hbmlmZXN0aW5nIGltIHRoZSBjYXVzYWwgCmJvZHksIGlzIHdoYXQgd2UgY2FsbCB0aGUgZWdvLiAKCgpOZXZlciBmb3JnZXQgdGhhdCB0aGUgZWdvIGlzIG5vdCB0aGUgbWFuYXMgCjQ0IAoKCjM0NiBBRFlBUiBUQUxLUyAKCgpvbmx5LCBidXQgdGhlIHNwaXJpdHVhbCB0cmlhZDsgYXQgb3VyIHByZXNlbnQgCnN0YWdlIG9mIGV2b2x1dGlvbiBoZSByZXN0cyBpbiBoaXMgY2F1c2FsIGJvZHkgCm9uIHRoZSBoaWdoZXIgbGV2ZWxzIG9mIHRoZSBtZW50YWwgcGxhbmUsIGJ1dCAKYXMgaGUgcGFzc2VzIG9ud2FyZHMgaGlzIGNvbnNjaW91c25lc3Mgd2lsbCAKYmUgY2VudHJlZCBvbiB0aGUgYnVkZGhpYyBwbGFuZSwgYW5kIGFmdGVyLSAKd2FyZHMsIHdoZW4gaGUgYXR0YWlucyBhZGVwdHNoaXAsIG9uIHRoZSAKbmlydmluaWMuIEJ1dCBpdCBtdXN0IG5vdCBiZSBzdXBwb3NlZCAKdGhhdCB3aGVuIHRoaXMgZnVydGhlciBkZXZlbG9wbWVudCB0YWtlcyAKcGxhY2UgdGhlIG1hbmFzIGlzIGluIGFueSB3ZXkgbG9zdC4gV2hlbiAKdGhlIGVnbyBkcmF3cyBoaW1zZWxmIHVwIGludG8gdGhlIGJ1ZGRoaWMgCnBsYW5lLCBoZSBkcmF3cyB1cCBtYW5hcyB3aXRoIGhpbSBpbnRvIAp0aGF0IGV4cHJlc3Npb24gb2YgbWFuYXMgd2hpY2ggaGFzIGFsbCB0aGUgdGltZSAKZXhpc3RlZCBvbiB0aGUgYnVkZGhpYyBwbGFuZSwgYnV0IGhhcyBub3QgCmJlZW4gZnVsbHkgdml2aWZpZWQgdW50aWwgbm93LiBJbiB0aGUgc2FtZSAKd2F5IHdoZW4gaGUgZHJhd3MgaGltc2VsZi4gdXAgaW50byB0aGUgCm5pcnZhbmljIHBsYW5lLCBtYW5hcyBhbmQgYnVkZGhpIGV4aXN0IAp3aXRoaW4gaGltIGp1c3QgYXMgZnVsbHkgYXMgZXZlciwgc28gdGhhdCAKbm93IHRoZSB0cmlwbGUgc3Bpcml0IGlzIGluIGZ1bGwgbWFuaWZlc3RhdGlvbiAKb24gaXRzIG93biBwbGFuZSBpbiBhbGwgaXRzIHRocmVlIGFzcGVjdHMuIApUaGVyZWZvcmUgdGhlIHNwaXJpdCBpcyB0cnVseSBzZXZlbi1mb2xkLCBmb3IgCmhlIGlzIHRyaXBsZSBvbiBoaXMgb3duIHBsYW5lLCBkdWFsIG9uIHRoZSAKYnVkZGhpYywgYW5kIHNpbmdsZSBvbiB0aGUgbWVudGFsLCBhbmQgdGhlIAp1bml0eSB3aGljaCBpcyBoaXMgc3ludGhlc2lzIG1ha2VzIHNldmVuLiAKVGhvdWdoIGhlIGRyYXdzIGJhY2sgaW50byB0aGUgaGlnaGVyIGhlIApyZXRhaW5zIHRoZSBkZWZpbml0ZW5lc3Mgb2YgdGhlIGxvd2VyLiAKClRoaXMgaXMgcHJvYmFibHkgd2hhdCBNYWRhbWUgQmxhdmF0c2t5IAptZWFudCB3aGVuIHNoZSBzcG9rZSBvZiB0aGUgYXVyaWMgZWdnLCAKYnV0IHNoZSBzdXJyb3VuZGVkIHRoaXMgaWRlYSB3aXRoIAoKClRIRSBUUklQTEUgU1BJUklUIDogMzQ3IAoKCmdyZWF0IG15c3RlcnksIGFuZCBpdCBzZWVtcyBsaWtlbHkgdGhhdCAKc2hlIHdhcyB1bmRlciBzb21lIHBsZWRnZSBub3QgdG8gd3JpdGUgCmZyZWVseSBhYm91dCBpdC4gU2hlIG5ldmVyIGNsZWFybHkgZXhwbGFpbi0gCmVkIHRoZSB0cmlwbGUgc3Bpcml0LCBidXQgZXZpZGVudGx5IGVuZGVhdm91ci0gCmVkIHRvIHN1Z2dlc3QgdGhlIGlkZWEgd2l0aG91dCBjbGVhcmx5IApleHByZXNzaW5nIGl0LCBmb3Igc2hlIGxhaWQgZ3JlYXQgc3RyZXNzIHVwb24gCnRoZSBmYWN0IHRoYXQsIGp1c3QgYXMgdGhlIGFzdHJhbCBwbGFuZSBtYXkgCmJlIHNhaWQgdG8gYmUgYSByZWZsZWN0aW9uIG9mIHRoZSBidWRkaGljLCAKc28gbWF5IHRoZSBwaHlzaWNhbCBiZSBzYWlkIHRvIGJlIGEgcmUtIApmbGVjdGlvbiBvZiB0aGUgbmlydmFuaWMsIGFuZCB0aGVuIHNoZSAKZnVydGhlcm1vcmUgZW1waGFzaXNlZCB0aGUgZmFjdCB0aGF0IHRoZXJlIAphcmUgdGhyZWUgYm9kaWVzIG9yIHZlaGljbGVzIG9mIG1hbiBvbiB0aGUgCnBoeXNpY2FsIHBsYW5l4oCUYXBwYXJlbnRseSBnb2luZyBvdXQgb2YgaGVyIAp3YXkgdG8gbWFrZSB0aGlzIGFncmVlLCBhbmQgZm9yIHRoYXQgCnB1cnBvc2UgZGl2aWRpbmcgdGhlIHBoeXNpY2FsIGJvZHkgb2YgbWFuIAppbnRvIHR3byBwYXJ0cywgdGhlIGRlbnNlIGFuZCB0aGUgZXRoZXJpYywgCmFuZCBhZGRpbmcgYXMgYSB0aGlyZCBwcmluY2lwbGUgdGhlIHZpdGFsaXR5IAp3aGljaCBmbG93cyB0aHJvdWdoIHRoZW0uIE5vdyBhcyB0aGlzIAp2aXRhbGl0eSBleGlzdHMgb24gYWxsIHRoZSBwbGFuZXMsIGFuZCBtaWdodCAKanVzdCBhcyB3ZWxsIGJlIG1hZGUgaW50byBhZGRpdGlvbmFsIHByaW5jaS0gCnBsZXMgb24gdGhlIGFzdHJhbCBhbmQgbWVudGFsIHBsYW5lcyBhcyBvbiAKdGhlIHBoeXNpY2FsLCBpdCB3b3VsZCBzZWVtIHRoYXQgc29tZSByZWFzb24gCmlzIHJlcXVpcmVkIGZvciBoZXIgcmF0aGVyIHBlY3VsaWFyIGFycmFuZ2UtIAptZW50LCBhbmQgcGVyaGFwcyB0aGlzIHJlYXNvbiBtYXkgYmUgZm91bmQgCmluIGhlciBkZXNpcmUgdG8gaW5kaWNhdGUgdGhlIHRyaXBsZSBzcGlyaXQgCndpdGhvdXQgYWN0dWFsbHkgbWVudGlvbmluZyBpdC4gSSB0aGluayB0aGUgClByZXNpZGVudCBoYXMgc2FpZCB0aGF0IHdoZW4gTWFkYW1lIApCbGF2YXRza3kgc3Bva2UgYWJvdXQgdGhlIHNhY3JlZCBhdXJpYyBlZ2cgCgoKMzQ4IEFEWUFSIFRBTEtTIAoKCnNoZSBtZWFudCB0aGUgZm91ciBwZXJtYW5lbnQgYXRvbXMgCndpdGhpbiBhbiBlbnZlbG9wZSBvZiBtYXR0ZXIgb2YgdGhlIG5pcnZhbmljIApwbGFuZS4gCgoKQnV2cHVpSWMgQ09vTm5zY0xsb1VTTkVTUyAKCgpBIHNlbGZpc2ggbWFuIGNvdWxkIG5vdCBmdW5jdGlvbiBvbiB0aGUgCmJ1ZGRoaWMgcGxhbmUsIGZvciB0aGUgdmVyeSBlc3NlbmNlIG9mIHRoYXQgCnBsYW5lIGlzIHN5bXBhdGh5IGFuZCBwZXJmZWN0IGNvbXByZWhlbnNpb24sIAp3aGljaCBleGNsdWRlcyBzZWxmaXNobmVzcy4gQSBtYW4gY2Fubm90IAptYWtlIGEgYnVkZGhpYyBib2R5IHVudGlsIGhlIGhhcyBjb24tIApxdWVyZWQgdGhlIGxvd2VyIHBsYW5lcy4gVGhlcmUgaXMgYSBjbG9zZSAKY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBhc3RyYWwgYW5kIHRoZSBidWRkaGljLCAKdGhlIGZvcm1lciBiZWluZyBpbiBzb21lIHdheXMgYSByZWZsZWN0aW9uIG9mIAp0aGUgbGF0dGVyOyBidXQgaXQgbXVzdCBub3QgdGhlcmVmb3JlIApiZSBzdXBwb3NlZCB0aGF0IGEgbWFuIGNhbiBsZWFwIGZyb20gdGhlIAphc3RyYWwgY29uc2Npb3VzbmVzcyB0byB0aGUgYnVkZGhpYyB3aXRob3V0IApkZXZlbG9waW5nIHRoZSBpbnRlcnZlbmluZyB2ZWhpY2xlcy4gCgpDZXJ0YWlubHkgb24gdGhlIGhpZ2hlc3QgbGV2ZWxzIG9mIHRoZSBidWQtIApkaGljIHBsYW5lIGEgbWFuIGJlY29tZXMgb25lIHdpdGggYWxsIG90aGVycywgCmJ1dCB3ZSBtdXN0IG5vdCB0aGVyZWZvcmUgYXNzdW1lIHRoYXQgaGUgCmZlZWxzIGFsaWtlIHRvd2FyZHMgYWxsLiBUaGVyZSBpcyBubyByZWFzb24gdG8gCnN1cHBvc2UgdGhhdCB3ZSBzaGFsbCBldmVyIGZlZWwgYWJzb2x1dGVseSBhbGlrZSAKdG93YXJkcyBldmVyeWJvZHk7IHdoeSBzaG91bGQgd2U/IEV2ZW4uIAp0aGUgTG9yZCBCdXBwdWEgaGFkIEhpcyBmYXZvdXJpdGUgZGlzY2lwbGUgCkFuYW5kYTsgZXZlbiB0aGUgQ2hyaXN0IHJlZ2FyZGVkIDguIEpvaG4gCgoKRVhQRVJJRU5DRSAzNDkgCgoKdGhlIEJlbG92ZWQgaW4gYSBkaWZmZXJlbnQgd2F5IGZyb20gdGhlIApyZXN0LiBXaGF0IGlzIHRydWUgaXMgdGhhdCBwcmVzZW50bHkgd2UgCnNoYWxsIGNvbWUgdG8gbG92ZSBldmVyeSBvbmUgYXMgbXVjaCBhcyAKd2Ugbm93IGxvdmUgb3VyIG5lYXJlc3QgYW5kIGRlYXJlc3QsIGJ1dCAK4oCcYnkgdGhhdCB0aW1lIHdlIHNoYWxsIGhhdmUgZGV2ZWxvcGVkIGZvciAKdGhvc2UgbmVhcmVzdCBhbmQgZGVhcmVzdCBhIHR5cGUgb2YgbG92ZSAKb2Ygd2hpY2ggd2UgaGF2ZSBubyBjb25jZXB0aW9uIG5vdy4gVGhlIApidWRkaGljIGNvbnNjaW91c25lc3MgaW5jbHVkZXMgdGhhdCBvZiBtYW55IApvdGhlcnMsIHNvIHRoYXQgeW91IG1heSBwdXQgeW91cnNlbGYgZG93biAKaW50byBhbm90aGVyIG1hbiBhbmQgZmVlbCBleGFjdGx5IGFzIGhlIGRvZXMsIApsb29raW5nIHVwb24gaGltIGZyb20gd2l0aGluIGluc3RlYWQgb2YgCmZyb20gd2l0aG91dC4gSW4gdGhhdCByZWxhdGlvbiB5b3Ugd2lsbCAKZmVlbCBubyBzaHJpbmtpbmcgZXZlbiBmcm9tIGFuIGV2aWwgbWFuLCAKYmVjYXVzZSB5b3Ugd2lsbCByZWNvZ25pc2UgaGltIGFzIHBhcnQgb2YgCnlvdXJzZWxm4oCUYSB3ZWFrIHBhcnQuIFlvdSB3aWxsIGRlc2lyZSB0byAKaGVscCBoaW0gYnkgcG91cmluZyBzdHJlbmd0aCBpbnRvIHRoYXQgCndlYWsgcGFydCBvZiB5b3Vyc2VsZi4gV2hhdCBpcyByZXF1aXItIAplZCBpcyByZWFsbHkgdG8gYmUgaW4gdGhpcyBhdHRpdHVkZSBhbmQgdG8gCmRvIGl0LCBub3QgbWVyZWx5IHRvIHRhbGsgYWJvdXQgaXQgb3IgdGhpbmsgCnZhZ3VlbHkgb2YgaXQ7IGFuZCBpdCBpcyBub3QgZWFzeSB0byBhY3F1aXJlIAp0aGlzIHBvd2VyLiAKCgpFWFBFUklFTkNFIAoKCkl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGV2ZXJ5IGVnbyB0byBnbyAKdGhyb3VnaCBldmVyeSBleHBlcmllbmNlLCBmb3Igd2hlbiB5b3UgCgoKJDUwIEFEWUFSIFRBTEtTIAoKCnJpc2UgdG8gdGhlIGJ1ZGRoaWMgbGV2ZWwgeW91IGNhbiBnYWluIHRoZSAKZXhwZXJpZW5jZSBvZiBvdGhlcnMsIGV2ZW4gb2YgdGhvc2XigJkgd2hvIApoYXZlIG9wcG9zZWQgcHJvZ3Jlc3MuIFdlIHNoYWxsIGZlZWwgYnkgCnN5bXBhdGh5LiBXZSBjb3VsZCB3aXRoZHJhdyBpZiB3ZSBkaWQgCm5vdCB3YW50IHRvIGZlZWwgYW5vdGhlcuKAmXMgc3VmZmVyaW5nIDsgYnV0LiAKd2Ugc2hvdWxkIGNob29zZSB0byBmZWVsIGl0IGJlY2F1c2Ugd2UgCndhbnQgdG8gaGVscC4gT24gdGhlIGJ1ZGRoaWMgcGxhbmUgd2UgCmVuZm9sZCB0aGUgbWFuIGluIG91ciBvd24gY29uc2Npb3VzbmVzcywgCmFuZCB0aG91Z2ggaGUga25vd3Mgbm90aGluZyBvZiBzdWNoIGVuZm9sZC0gCm1lbnQgaXQgd2lsbCB0byBhIGNlcnRhaW4gZXh0ZW50IGxlc3NlbiBoaXMgCnN1ZmZlcmluZ3MuIEluIGFsbCBwcm9iYWJpbGl0eSB3ZSBoYXZlIGFsbCAKaGFkIG1vc3Qgb2YgdGhlIGV4cGVyaWVuY2VzIG9mIHRoZSBzYXZhZ2UgCmFuZCBoYWxmLWNpdmlsaXNlZCBzdGFnZXMuIEFuIGFkZXB0IHdvdWxkIApuZWNlc3NhcmlseSB3aXNoIHRvIHJlbW92ZSBvciByZWxpZXZlIHN1Zi0gCmZlcmluZywgYnV0IHdlIG1heSBlYXNpbHkgaW1hZ2luZSBhIGNhc2UgCmluIHdoaWNoIGhlIHdvdWxkIHNlZSB0aGF0IHRoZSBnb29kIHdoaWNoIAp3YXMgYmVpbmcgcHJvZHVjZWQgYnkgdGhlIHN1ZmZlcmluZyBzbyAKZW5vcm1vdXNseSBvdXR3ZWlnaGVkIHRoZSBwcmVzZW50IHBhaW4gdGhhdCAKdG8gaW50ZXJmZXJlIHdvdWxkIG5vdCBiZSBraW5kbmVzcyBidXQgCmNydWVsdHkgdG8gdGhlIHN1ZmZlcmVyLiBIZSB3b3VsZCBzZWUgdGhlIAp3aG9sZSwgbm90IG9ubHkgdGhlIHBhcnQuIEhpcyBzeW1wYXRoeSAKd291bGQgYmUgZGVlcGVyIHRoYW4gb3VycywgYnV0IGhlIHdvdWxkIApub3QgZXhwcmVzcyBpdCBpbiBhY3Rpb24gYmVlbiB3aGVuIGFjdGlvbiAKd2FzIHVzZWZ1bC4gCgoKVEhFIFNQSEVSRVMgMzUxIAoKClRIZSBTUEhFUkVTIAoKCkluIGFueSBkaWFncmFtIHdoaWNoIHJlcHJlc2VudHMgdGhlIAp2YXJpb3VzIHBsYW5lcyB3ZSB1c3VhbGx5IGRyYXcgdGhlbSBhcyAK4oCYbHlpbmcgb25lIGFib3ZlIHRoZSBvdGhlciBsaWtlIHRoZSBzaGVsdmVzIApvZiBhIGJvb2stY2FzZS4gQnV0IHRoZW4gaW4gZXhwbGFpbmluZyAKdGhhdCBkaWFncmFtIHdlIGFyZSBjYXJlZnVsIHRvIHNheSB0aGF0IAp0aGlzIG11c3Qgbm90IGJlIHRha2VuIGxpdGVyYWxseSwgc2luY2UgYWxsIAp0aGUgcGxhbmVzIGludGVycGVuZXRyYXRlIGFuZCBhbGwgb2YgdGhlbSAKYXJlIGFib3V0IHVzIGhlcmUgYWxsIHRoZSB0aW1lLiBUaGF0IGlzIApwZXJmZWN0bHkgdHJ1ZSwgYW5kIHlldCB0aGVyZSBpcyBhIHNlbnNlIGluIAp3aGljaCB0aGUgc2hlbGYtbGlrZSBhcnJhbmdlbWVudCBpcyB0cnVlIGFsc28uIApXZSBtYXkgcGVyaGFwcyBkcmF3IGFuIGFuYWxvZ3kgZnJvbSAKdGhlIGNvbmRpdGlvbiBvZiBhZmZhaXJzIHdoaWNoIHdlIF8gZmluZCAKZXhpc3RpbmcgdXBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgcGh5c2ljYWwgCmVhcnRoLiBXZSBtYXkgdGFrZSB0aGUgc29saWQgbWF0dGVyIGZvciAKYWxsIHByYWN0aWNhbCBwdXJwb3NlcyBhcyBleGlzdGluZyBvbmx5IHVuZGVyIApvdXIgZmVldCwgYXMgdGhlIGxvd2VzdCBzdHJhdHVtIG9mIHBoeXNpY2FsIAptYXR0ZXIsIHRob3VnaCBvZiBjb3Vyc2UgaXQgaXMgdHJ1ZSB0aGF0IApjb3VudGxlc3MgbWlsbGlvbnMgb2YgcGFydGljbGVzIG9mIHNvbGlkIG1hdHRlciAKYXJlIGFsc28gZmxvYXRpbmcgaW4gdGhlIGFpciBvdmVyIG91ciBoZWFkcy4gCgpXZSBtYXkgc2F5IHRoYXQsIHJvdWdobHkgc3BlYWtpbmcsIHRoZSAKbGlxdWlkIG1hdHRlciBvZiB0aGUgZWFydGggKGNoaWVmbHkgd2F0ZXIpIApoZXMgdXBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgc29saWQgbWF0dGVyLCAKdGhvdWdoIGFnYWluIGl0IGlzIHRydWUgdGhhdCBhIGxhcmdlIGFtb3VudCAKb2Ygd2F0ZXIgaW50ZXJwZW5ldHJhdGVzIHRoZSBlYXJ0aCBiZW5lYXRoIAp1cywgYW5kIGFsc28gdGhhdCBtaWxsaW9ucyBvZiB0b25zIG9mIHdhdGVyIAphcmUgcmFpc2VkIGFib3ZlIHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aCAKCgozNTIgQURZQVIgVEFMS1MgCgoKaW4gdGhlIGZvcm0gb2YgY2xvdWRzLiBTdGlsbCwgdGhlIGdyZWF0IGJ1bGsgCm9mIHRoZSBsaXF1aWQgbWF0dGVyIG9mIHRoZSBlYXJ0aCBsaWVzIG9uIHRoZSAKdG9wIG9mIGl0cyBzb2xpZCBtYXR0ZXIgaW4gdGhlIGZvcm0gb2YgdGhlIG9jZWFuLCAKbGFrZXMgYW5kIHJpdmVycy4gVGhlbiB0aGUgZ2FzZW91cyBtYXR0ZXIgCm9mIG91ciBlYXJ0aCAoY2hpZWZseSB0aGUgYXRtb3NwaGVyZSkgbGVzIAp1cG9uIHRoZSBzdXJmYWNlIG9mIHRoZSB3YXRlciBhbmQgb2YgdGhlIApzb2xpZCBlYXJ0aCwgYW5kIGV4dGVuZHMgbXVjaCBmdXJ0aGVyIGF3YXkgCmludG8gc3BhY2UgdGhhbiBlaXRoZXIgdGhlIGxpcXVpZCBvciB0aGUgCnNvbGlkLiDigJggCgpBbGwgdGhyZWUgY29uZGl0aW9ucyBvZiBtYXR0ZXIgZXhpc3QgaGVyZSAKYXQgdGhlIHN1cmZhY2Ugb2YgdGhlIGVhcnRoIHdoZXJlIHdlIGxpdmUsIApidXQgdGhlIHdhdGVyIGluIHRoZSBmb3JtIG9mIGNsb3VkcyBleHRlbmRzIApmdXJ0aGVyIGFib3ZlIHRoYXQgc3VyZmFjZSB0aGFuIGRvZXMgb3JkaS0gCm5hcnkgZHVzdCwgYW5kIGFnYWluIHRoZSBhaXIsIHRob3VnaCBpbi0gCnRlcnBlbmV0cmF0aW5nIGJvdGggdGhlIG90aGVycywgZXh0ZW5kcyBtdWNoIApmdXJ0aGVyIGF3YXkgc3RpbGwuIFRoaXMgaXMgYnkgbm8gbWVhbnMgCmEgYmFkIGFuYWxvZ3kgdG8gZXhwbGFpbiB0aGUgYXJyYW5nZW1lbnQgCm9mIHRoZSBtYXR0ZXIgb2YgdGhlIGhpZ2hlciBwbGFuZXMuIAoKV2hhdCB3ZSBjYWxsIG91ciBhc3RyYWwgcGxhbmUgbWF5IGFsc28gCmJlIGNvbnNpZGVyZWQgYXMgdGhlIGFzdHJhbCBib2R5IG9mIHRoZSAKZWFydGguIEl0IGNlcnRhaW5seSBleGlzdHMgYWxsIHJvdW5kIHVzLCBhbmQgCmludGVycGVuZXRyYXRlcyB0aGUgc29saWQgZWFydGggYmVuZWF0aCBvdXIgCmZlZXQsIGJ1dCBpdCBhbHNvIGV4dGVuZHMgZmFyIGF3YXkgYWJvdmUgb3VyIApoZWFkcywgc28gdGhhdCB3ZSBtYXkgdGhpbmsgb2YgaXQgYXMgYSAKLWh1Z2UgYmFsbCBvZiBhc3RyYWwgbWF0dGVyIHdpdGggdGhlIHBoeXMtIAppY2FsIGVhcnRoIGluIHRoZSBtaWRkbGUgb2YgaXQsIG11Y2ggYXMgdGhlIApwaHlzaWNhbCBib2R5IG9mIGEgbWFuIGV4aXN0cyB3aXRoaW4gdGhlIApvdm9pZCBmb3JtIHdoaWNoIGlzIGZpbGxlZCB3aXRoIGFzdHJhbCBtYXR0ZXIsIAoKClRIRSBTUEhFUkVTIOKAlCAzNTMgCgoKZXhjZXB0LiB0aGF0IGluIHRoZSBjYXNlIG9mIHRoZSBlYXJ0aCB0aGUgcHJvLSAKcG9ydGlvbmF0ZSBzaXplIG9mIGl0cyBhc3RyYWwgYm9keSBvdXRzaWRlIHRoZSAKcGh5c2ljYWwgaXMgZW5vcm1vdXNseSBncmVhdGVyIHRoYW4gaW4gdGhlIGNhc2UgCm9mIG1hbi4gQnV0IGp1c3QgYXNpbiB0aGUgY2FzZSBvZiB0aGUgbWFuIAp0aGUgZGVuc2VzdCBhZ2dyZWdhdGlvbiBvZiBhc3RyYWwgbWF0dGVyIGlzIAp0aGF0IHdoaWNoIGlzIHdpdGhpbiB0aGUgcGVyaXBoZXJ5IG9mIHRoZSAKcGh5c2ljYWwgYm9keSwgc28gaW4gdGhlIGNhc2Ugb2YgdGhlIGVhcnRoIApieSBmYXIgdGhlIGdyZWF0ZXIgcGFydCBvZiBpdHMgYXN0cmFsIG1hdHRlciAKaXMgZ2F0aGVyZWQgdG9nZXRoZXIgd2l0aGluIHRoZSBsaW1pdCBvZiB0aGUgCnBoeXNpY2FsIHNwaGVyZTogCgpOZXZlcnRoZWxlc3MgdGhlIHBvcnRpb24gb2YgdGhlIGFzdHJhbCAKc3BoZXJlIHdoaWNoIGlzIGV4dGVyaW9yIHRvIHRoZSBwaHlzaWNhbCBleC0gCnRlbmRzIG5lYXJseSB0byB0aGUgbWVhbiBkaXN0YW5jZSBvZiB0aGUgCm1vb27igJlzIG9yYml0LCBzbyB0aGF0IHRoZSBhc3RyYWwgcGxhbmVzIG9mIAp0aGUgdHdvIHdvcmxkcyB0b3VjaCBvbmUgYW5vdGhlciB3aGVuIHRoZSAKbW9vbiBpcyBpbiBwZXJpZ2VlLCDigJhidXQuIGRvIG5vdCBzbyB0b3VjaCAKd2hlbiB0aGUgbW9vbiBpcyBpbiBhcG9nZWUuIEluY2lkZW50YWxseSAKaXQgZm9sbG93cyB0aGF0IGF0IGNlcnRhaW4gdGltZXMgb2YgdGhlIG1vbnRoIAphc3RyYWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtb29uIGlzIHBvc3NpYmxlLCAKYW5kIGF0IGNlcnRhaW4gb3RoZXIgdGltZXMgaXQgaXMgbm90LiAKClRoZSBtZW50YWwgcGxhbmUgb2Ygb3VyIGVhcnRoIGJlYXJzIGFib3V0IAp0aGUgc2FtZSBwcm9wb3J0aW9uIHRvIHRoZSBhc3RyYWwgYXMgdGhlIApsYXR0ZXIgZG9lcyB0byB0aGUgcGh5c2ljYWwuIEl0IGFsc28gaXMgYSAKaHVnZSBnbG9iZSwgY29uY2VudHJpYyB3aXRoIHRoZSBvdGhlciB0d28sIAppbnRlcnBlbmV0cmF0aW5nIHRoZW0gYm90aCwgYnV0IGV4dGVuZGluZyAKbXVjaCBmdXJ0aGVyIGZyb20gdGhlIGNlbnRyZSB0aGFuIC5kb2VzIAp0aGUgYXN0cmFsIGdsb2JlLiBJdCB3aWxsIGJlIHNlZW4gdGhhdCB0aGUgCgoKZWZmZWN0IG9mIHRoaXMuLmlzIHRoYXQsIHdoaWxlIG1hdHRlciBvZiBhbGwgCmFzIHwgCgoKQjQ0IEFEWUFSIFRBTEtTIAoKCnRoZSBwbGFuZXMgZXhpc3RzIHRvZ2V0aGVyIGRvd24gaGVyZSwgdGhlcmUgCmlzIGEgY2VydGFpbiBhbW91bnQgb2YgdHJ1dGggaW4gdGhlIGlsbHVzLSAKdHJhdGlvbiBvZiB0aGUgc2hlbHZlcywgZm9yIGJleW9uZCB0aGUgCmxpbWl0IG9mIHRoZSBwaHlzaWNhbCBhdG1vc3BoZXJlIHRoZXJlIGlzIGEgCmNvbnNpZGVyYWJsZSBzaGVsbCB3aGljaCBjb25zaXN0cyBvbmx5IG9mIAphc3RyYWwgYW5kIG1lbnRhbCBtYXR0ZXIsIGFuZCBvdXRzaWRlIG9mIAp0aGF0IGFnYWluIGFub3RoZXIgc2ltaWxhciBzaGVsbCB3aGljaCBjb24tIApzaXN0cyBvZiBtZW50YWwgbWF0dGVyIG9ubHkuIAoKV2hlbiB3ZSByZWFjaCB0aGUgYnVkZGhpYyBwbGFuZSB0aGUgCmV4dGVuc2lvbiBiZWNvbWVzIHNvIGdyZWF0LiB0aGF0IHdoYXQgd2UgCm1pZ2h0IGNhbGwgdGhlIGJ1ZGRoaWMgYm9kaWVzIG9mIHRoZSBkaWZmZXItIAplbnQgcGxhbmV0cyBvZiBvdXIgY2hhaW4gbWVldCBvbmUgYW5vdGhlciwgCmFuZCBzbyB0aGVyZSBpcyBidXQgb25lIGJ1ZGRoaWUgYm9keSAKZm9yIHRoZSB3aG9sZSBjaGFpbiwgd2hpY2ggbWVhbnMgdGhhdCAKaW4gdGhlIGJ1ZGRoaWMgdmVoaWNsZSBpdCBpcyBwb3NzaWJsZSB0byAKcGFzcyBmcm9tIG9uZSBvZiB0aGVzZSBwbGFuZXRzIHRvIGFuLSAKb3RoZXIuIEkgcHJlc3VtZSB0aGF0IHdoZW4gaW52ZXN0aWdhdGlvbnMgCmluIGEgc2ltaWxhciB3YXkgYXJlIGV4dGVuZGVkIHRvIHRoZSAKbmlydmFuaWMgcGxhbmUgaXQgd2lsbCBiZSBmb3VuZCB0aGF0IHRoYXQgCm1hdHRlciBleHRlbmRzIHNvIG11Y2ggZnVydGhlciB0aGF0IG90aGVyIApjaGFpbnMgYXJlIGluY2x1ZGVkIGluIGl0IGFzIHdlbGzigJRwZXJoYXBzIAp0aGUgZW50aXJlIHNvbGFyIHN5c3RlbS4gCgpBbGwgdGhpcyBpcyB0cnVlIGFzIGZhciBhcyBpdCBnb2VzLCBhbmQgCnlldCBpdCBkb2VzIG5vdCBjb252ZXkgYSByZWFsbHkgYWNjdXJhdGUgCmlkZWEgb2YgdGhlIHRydWUgcG9zaXRpb24gb2YgYWZmYWlycywgYmVjYXVzZSAKb2YgdGhlIGZhY3QgdGhhdCBvdXIgbWluZHMgY2FuIGdyYXNwIG9ubHkgCnRocmVlIGRpbWVuc2lvbnMsIHdoZXJlYXMgaW4gcmVhbGl0eSB0aGVyZSBhcmUgCm1hbnkgbW9yZSwgYW5kIGFzIHdlIHJhaXNlIG91ciBjb25zY2lvdXNuZXNzIAoKClRIRSBTUEhFUkVTIDM1NSAKCgpmcm9tIHBsYW5lIHRvIHBsYW5lLCBlYWNoIHN0ZXAgb3BlbnMgYmVmb3JlIAp1cyB0aGUgcG9zc2liaWxpdHkgb2YgY29tcHJlaGVuZGluZyBvbmUgbW9yZSAKb2YgdGhlc2UgZGltZW5zaW9ucy4gVGhpcyBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gCmRlc2NyaWJlIGV4YWN0bHkgdGhlIHBvc2l0aW9uIG9mIHRob3NlIHdobyBoYXZlIApwYXNzZWQgYXdheSBmcm9tIHRoZSBwaHlzaWNhbCBoZmUgdG8gb3RoZXIgCnBsYW5lcy4gU29tZSBvZiBzdWNoIHBlb3BsZSB0ZW5kIHRvIGhvdmVyIApyb3VuZCB0aGVpciBlYXJ0aGx5IGhvbWVzLCBpbiBvcmRlciB0byBrZWVwIAppbiB0b3VjaCB3aXRoIHRoZWlyIGZyaWVuZHMgb2YgdGhlIHBoeXNpY2FsIApsaWZlIGFuZCB0aGUuIHBsYWNlcyB3aGljaCB0aGV5IGtub3c7IApvdGhlcnMsIG9uIHRoZSBvdGhlciBoYW5kLCBoYXZlIGEgdGVuZGVuY3kgCnRvIGZsb2F0IGF3YXkgYW5kIHRvIGZpbmQgZm9yIHRoZW1zZWx2ZXMsIAphcyBpZiBieSBzcGVjaWZpYyBncmF2aXR5LCBhIGxldmVsIG11Y2ggCmZ1cnRoZXIgcmVtb3ZlZCBmcm9tIHRoZSBzdXJmYWNlIG9mIHRoZSAKZWFydGguIAoKVGhlIGF2ZXJhZ2UgcGVyc29uIHBhc3NpbmcgaW50byB0aGUgCmhlYXZlbi1saWZlLCBmb3IgZXhhbXBsZSwtIHRlbmRzIHRvIGZsb2F0IGF0IAphIGNvbnNpZGVyYWJsZSBkaXN0YW5jZSBhYm92ZSB0aGUgc3VyLSAKZmFjZSBvZiB0aGUgZWFydGgsIGFsdGhvdWdoIG9uIHRoZSBvdGhlciAKaGFuZCBzb21lIG9mIHN1Y2ggbWVuIGFyZSBkcmF3biB0byBvdXIgCmxldmVsLiBTdGlsbCwgYnJvYWRseSBzcGVha2luZywgdGhlIGluaGFiaXQtIAphbnRzIG9mIHRoZSBoZWF2ZW4td29ybGQgbWF5IGJlIHRob3VnaHQgCm9mIGFzIGxpdmluZyBpbiBhIHNwaGVyZSBvciByaW5nIG9yIHpvbmUgCnJvdW5kIHRoZSBlYXJ0aC4gV2hhdCBTcGlyaXR1YWxpc3RzIGNhbGwgCnRoZSBzdW1tZXItbGFuZCBleHRlbmRzIG1hbnkgbWlsZXMgYWJvdmUgCm91ciBoZWFkcywgYW5kIGFzIHBlb3BsZSBvZiB0aGUgc2FtZSByYWNlIAphbmQgdGhlIHNhbWUgcmVsaWdpb24gdGVuZCB0byBrZWVwIHRvLSAKZ2V0aGVyIGFmdGVyIGRlYXRoIGp1c3QgYXMgdGhleSBkbyBkdXJpbmcgCmxpZmUsIHdlIGhhdmUgd2hhdCBtYXkgYmUgZGVzY3JpYmVkIGFzIGEgCgoKMzU2IEFEWUFSIFRBTEtTIAoKCmtpbmQgb2YgbmV0d29yayBvZiBzdW1tZXItbGFuZHMgb3ZlciB0aGUgCmNvdW50cmllcyB0byB3aGljaCBiZWxvbmcgdGhlIHBlb3BsZSB3aG8gCmhhdmUgY3JlYXRlZCB0aGVtLiAKClBlb3BsZSBmaW5kIHRoZWlyIG93biBsZXZlbCBvbiB0aGUgYXN0cmFsIApwbGFuZSwgbXVjaCBpbiB0aGUgc2FtZSB3YXkgYXMgb2JqZWN0cyAKZmxvYXRpbmcgaW4gdGhlIG9jZWFuIGRvLiBUaGlzIGRvZXMgbm90IG1lYW4gCnRoYXQgdGhleSBjYW5ub3QgcmlzZSBhbmQgZmFsbCBhdCB3aWxsLCBidXQgCnRoYXQgaWYgbm8gc3BlY2lhbCBlZmZvcnQgaXMgbWFkZSB0aGV5IGNvbWUgCnRvIHRoZWlyIGxldmVsIGFuZCByZW1haW4gLnRoZXJlLiBBc3RyYWwgCm1hdHRlciBncmF2aXRhdGVzIHRvd2FyZHMgdGhlIGNlbnRyZSBvZiB0aGUgCmVhcnRoIGp1c3QgYXMgcGh5c2ljYWwgbWF0dGVyIGRvZXM7IGJvdGggCm9iZXkgdGhlIHNhbWUgZ2VuZXJhbCBsYXdzLiBXZSBtYXkgdGFrZSAKaXQgdGhhdCB0aGUgc2l4dGggc3ViLXBsYW5lIG9mIHRoZSBhc3RyYWwgaXMgCuKAmHBhcnRpYWxseSBjb2luY2lkZW50IHdpdGguIHRoZSBzdXJmYWNlIG9mIHRoZSAKZWFydGgsIHdoaWxlIHRoZSBsb3dlc3Qgb3Igc2V2ZW50aCBwZW5ldHJhdGVzIApzb21lIGRpc3RhbmNlIGludG8gdGhlIGludGVyaW9yLiAKClRoZSBjb25kaXRpb25zIG9mIHRoZSBpbnRlcmlvciBvZiBvdXIgZWFydGggCmFyZSBub3QgZWFzeSB0byBkZXNjcmliZS4uLiBWYXN0IGNhdml0aWVzIApleGlzdCBpbiBpdCwgYW5kIHRoZXJlIGFyZSByYWNlcyBpbmhhYml0aW5nIAp0aGVzZSBjYXZpdGllcywgYnV0IHRoZXkgYXJlIG5vdCBvZiB0aGUgc2FtZSAKZXZvbHV0aW9uIGFzIG91cnNlbHZlcy4gT25lIG9mIHRoZXNlIGV2b2x1LSAKdGlvd3MsIHdoaWNoIGlzIGF0IGEgbGV2ZWwgZGlzdGluY3RseSBsb3dlciAKdGhhbiBhdXkgcmFjZSBub3cgZXhpc3RpbmcgdXBvbiB0aGUgc3VyZmFjZSAKb2YgdGhlIGVhcnRoLCAxcyB0byBzb21lIGV4dGVudCBkZXNjcmliZWQgCmluIHRoZSBzZXZlbnRlZW50aCBsaWZlIG9mIEFsY3lvbmUsIHB1Ymxpc2hlZCAKcmVlZW50bHkgaW4gVGhlIFRoZW9zb3BoaXN0OyB0aGUgb3RoZXIgaXMgCm1vcmUgbmVhcmx5IGF0IG91ciBKZXZlbCwgeWV0IHV0dGVybHkgZGlmZmVyLSAKZW50IGZyb20gYW55dGhpbmcgdGhhdCB3ZSBrbm93LiAKCgpUSEUgU1BIRVJFUyAzMDcgCgoKQXMgdGhlIGNlbnRyZSBvZiB0aGUgZWFydGggaXMgYXBwcm9hY2gtIAplZCwgbWF0dGVyIGlzIGZvdW5kIHRvLiBleGlzdCBpbiBhIHN0YXRlIApub3QgcmVhZGlseSBjb21wcmVoZW5zaWJsZSB0byB0aG9zZSB3aG8gCmhhdmUgbm90IHNlZW4gaXQ7IGEgc3RhdGUgaW4gd2hpY2ggaXQgCuKAmDFzIGZhciBkZW5zZXIgdGhhbiB0aGUgZGVuc2VzdCBtZXRhbCBrbm93biAKdG8gdXMsIGFuZCB5ZXQgZmxvd3MgYXMgcmVhZGlseSBhcyB3YXRlci4gCkJ1dCB5ZXQgdGhlcmUgaXMgc29tZXRoaW5nIGVsc2Ugd2l0aGluIGV2ZW4gCnRoYXQuIFN1Y2ggbWF0dGVyIGlzIGZhciB0b28gZGVuc2UgZm9yIGFueSAKZm9ybXMgb2YgbGlmZSB0aGF0IHdlIGtub3csIGJ1dCBuZXZlcnRoZS0gCmxlc3MgaXQgaGFzIGNvbm5lY3RlZCB3aXRoIGl0IGFuIGV2b2x1dGlvbiAKb2YgaXRzIG93bi4gCgpUaGUgdHJlbWVuZG91cyBwcmVzc3VyZXMgd2hpY2ggZXhpc3QgaGVyZSAKYXJlIHV0aWxpc2VkIGJ5IHRoZSBUaGlyZCBMb2dvcyBmb3IgdGhlIAptYW51ZmFjdHVyZSBvZiBuZXcgZWxlbWVudHM7IGltIGZhY3QsIHRoZSAKY2VudHJhbCBwb3J0aW9ucyBvZiB0aGUgZWFydGggbWF5IHdpdGggZ3JlYXQgCnRydXRoIGJlIHJlZ2FyZGVkIGFzIEhpcyBsYWJvcmF0b3J5LCBmb3IgCnRlbXBlcmF0dXJlcyBhbmQgcHJlc3N1cmVzIGFyZSBvYnRhaW1hYmxlIAp0aGVyZSBvZiB3aGljaCB3ZSBvbiB0aGUgc3VyZmFjZSBoYXZlIG5vIApjb25jZXB0aW9uLiBJdCBpcyB0aGVyZSB0aGF0LCB1bmRlciBIaXMgCmRpcmVjdGlvbiwgdHJvb3BzIG9mIGRldmFzIGFuZCBuYXR1cmUtc3Bpcml0cyAKb2YgYSBwYXJ0aWN1bGFyIHR5cGUgY29tYmluZSBhbmQgc2VwYXJhdGUsIAphcnJhbmdlIGFuZCByZWFycmFuZ2UgdGhlIHVsdGltYXRlIHBoeXMtIAppY2FsIGF0b21zLCB3b3JraW5nIGFsb25nIHRoZSB3b25kZXJmdWwgCmRvdWJsZSBzcGlyYWwgd2hpY2ggaXMgc3ltYm9saXNlZCBpbiBTaXIgCldpbGxpYW0gQ3Jvb2tlc+KAmSBsZW1uaXNjYXRlcy4gRnJvbSB0aGlzIApwb2ludCBhbHNvLCBpbmNyZWRpYmxlIGFzIGl0IHNlZW1zIHRvIHVzLCAKdGhlcmUgaXMgYSBkaXJlY3QgY29ubmVjdGlvbiB3aXRoIHRoZSBoZWFydCAKb2YgdGhlIHN1biwgc28gdGhhdCBlbGVtZW50cyBtYWRlIHRoZXJlIAoKCjM1OCBBRFlBUiBUQUxLUyAKCgphcHBlYXIgaW4gdGhlIGNlbnRyZSBvZiB0aGUgZWFydGggd2l0aG91dCAKcGFzc2luZyB0aHJvdWdoIHdoYXQgd2UgY2FsbCB0aGUgc3VyZmFjZSA7IApidXQgaXQgaXMgdXNlbGVzcyB0byBzcGVhayBvZiB0aGlzIHVudGlsIHRoZSAKaGlnaGVyIGRpbWVuc2lvbnMgb2Ygc3BhY2UgYXJlIG1vcmUgZ2VuZXJhbGx5IAp1bmRlcnN0b29kLiBBcyBpbiB0aGUgY2FzZSBvZiB0aGUgcGh5c2ljYWwsICcgCnRoZSBkZW5zZXN0IGFzdHJhbCBtYXR0ZXIgaXMgZmFyIHRvbyBkZW5zZSBmb3IgCnRoZSBvcmRpbmFyeSBmb3JtcyBvZiBhc3RyYWwgbGlmZTsgYnV0IHRoYXQgCmFsc28gaGFzIG90aGVyIGZvcm1zIG9mIGl0cyBvd24gd2hpY2ggYXJlIApxdWl0ZSB1bmtub3duIHRvIHN0dWRlbnRzIC5vZiB0aGUgc3VyZmFjZS4gCgpJbiBpbnZlc3RpZ2F0aW5nIHRoZSBpbnRlcmlvciBvZiB0aGUgZWFydGggCndlIGRpZCBub3QgZmluZCBhIGNlbnRyYWwgc2hhZnQgcnVubmluZyAKZnJvbSBwb2xlIHRvIHBvbGUsIHN1Y2ggYXMgaGFzIGJlZW4gZGUtIApzY3JpYmVkIGJ5IHNvbWUgbWVkaXVtcywgbm9yIGRpZCB3ZSBmaW5kIAphIG51bWJlciBvZiBjb25jZW50cmljIHNwaGVyZXMgcmVzdGluZyB1cC0gCm9uIGN1c2hpb25zIG9mIHN0ZWFtLiBBdCB0aGUgc2FtZSB0aW1lIAp0aGVyZSBhcmUgY2VydGFpbiBmb3JjZXMgd2hpY2ggZG8gXyBwbGF5IAp0aHJvdWdoIGNvbmNlbnRyaWMgbGF5ZXJzLCBhbmQgaXQgaXMgbm90IApkaWZmaWN1bHQgdG8gc2VlIHdoYXQgd2VyZSB0aGUgbmF0dXJhbCAKcGhlbm9tZW5hIHdoaWNoIGRlY2VpdmVkIHRob3NlIHdobywgaW4gCnBlcmZlY3QgZ29vZCBmYWl0aCwgbWFkZSB0aGF0IHN0YXRlbWVudC4gCgpUaGVyZSBpcyB1bnF1ZXN0aW9uYWJseSBhIGZvcmNlIG9mIGV0aGVyaWMgCnByZXNzdXJlIGp1c3QgYXMgdGhlcmUgaXMgb2YgYXRtb3NwaGVyaWMgCnByZXNzdXJlLCBhbmQgaXQgY2FuIGJlIHV0aWxpc2VkIGJ5IG1hbiBhZyAKc29vbiBhcyBoZSBjYW4gZGlzY292ZXIgc29tZSBtYXRlcmlhbCB3aGljaCAKaXMgZXRoZXItcHJvb2YuIFRoZSBzYW1lIHByZXNzdXJlIGV4aXN0cyBpbiAKdGhlIGFzdHJhbCB3b3JsZC4gVGhlIG1vc3Qgb3JkaW5hcnkgZXhhbXBsZSAKb2YgdGhpcyBpcyB3aGF0IGhhcHBlbnMgd2hlbiBhIG1hbiBsZWF2ZXMgCmhpcyBib2R5IGluIHNsZWVwIG9yIGluIGRlYXRoLiB8IAoKClRIRSBTUEhFUkVTIDM1OSAKCgpXaGVuIHRoZSBhc3RyYWwgYm9keSBpcyB3aXRoZHJhd24gCmZyb20gdGhlIHBoeXNpY2FsLCB3ZSBtdXN0IG5vdCBzdXAtIApwb3NlIHRoYXQgdGhhdCBwaHlzaWNhbCBib2R5IGlzIF8gbGVmdCAKd2l0aG91dCBhbiBhc3RyYWwgY291bnRlcnBhcnQuIFRoZSBwcmVzc3VyZSAKb2YgdGhlIHN1cnJvdW5kaW5nIGFzdHJhbCBtYXR0ZXLigJRhbmQgdGhhdCAKcmVhbGx5IG1lYW5zIHRoZSBhY3Rpb24gb2YgdGhlIGZvcmNlIG9mIApncmF2aXRhdGlvbiBvbiB0aGUgYXN0cmFsIHBsYW5l4oCUaW1tZWRpYXRlLSAKbHkgZm9yY2VzIG90aGVyIGFzdHJhbCBtYXR0ZXIgaW50byB0aGF0IAphc3RyYWxseSBlbXB0eSBzcGFjZSwganVzdCBhcywgaWYgd2UgY3JlYXRlIAphIHZvcnRleCBhbmQgZHJhdyBvdXQgdGhlIGFpciBmcm9tIGEgcm9vbSwgCm90aGVyIGFpciBmbG93cyBpbiBpbnN0YW50bHkgZnJvbSB0aGUgc3VyLSAKcm91bmRpbmcgYXRtb3NwaGVyZS4gQnV0IHRoYXQgYXN0cmFsIG1hdHRlciAKd2lsbCBjb3JyZXNwb25kIHdpdGggY3VyaW91cyBhY2N1cmFjeSB0byAKdGhlIHBoeXNpY2FsIG1hdHRlciB3aGljaCBpdCBpbnRlcnBlbmV0cmF0ZXMuIApFdmVyeSB2YXJpZXR5IG9mIHBoeXNpY2FsIG1hdHRlciBhdHRyYWN0cyAKYXN0cmFsIG1hdHRlciBvZiBjb3JyZXNwb25kaW5nIGRlbnNpdHksIHNvIAp0aGF0IHNvbGlkIHBoeXNpY2FsIG1hdHRlciBpcyBpbnRlcnBlbmV0cmF0ZWQgCmJ5IHdoYXQgd2UgbWF5IGNhbGwgc29saWQgYXN0cmFsIG1hdHRlcuKAlCAKdGhhdCBpcywgbWF0dGVyIG9mIHRoZSBsb3dlc3QgYXN0cmFsIHN1Yi0gCnBsYW5lOyB3aGVyZWFzIHBoeXNpY2FsIGxpcXVpZCBpcyBpbnRlcnBlbmUtIAp0cmF0ZWQgYnkgbWF0dGVyIG9mIHRoZSBuZXh0IGFzdHJhbCBzdWItIAoKCl8gcGxhbmXigJRhc3RyYWwgbGlxdWlkOyB3aGlsZSBwaHlzaWNhbCBnYXMgaW4gCgoKdHVybiBhdHRyYWN0cyBpdHMgcGFydGljdWxhciBjb3JyZXNwb25kZW5jZeKAlCAKbWF0dGVyIG9mIHRoZSB0aGlyZCBhc3RyYWwgc3ViLXBsYW5lIGZyb20gCnRoZSBib3R0b20sIHdoaWNoIG1pZ2h0IGJlIGNhbGxlZCBhc3RyYWwgCmFzLiAKClRha2UgdGhlIGNhc2Ugb2YgYSBnbGFzcyBvZiB3YXRlcjsgdGhlIAp0dW1ibGVyIChiZWluZyBzb2xpZCBtYXR0ZXIpIGlzIGludGVycGVuZS0gCgoKMzYwIHwgQURZQVIgVEFMS1M6IAoKCnRyYXRlZCBieSBhc3RyYWwgbWF0dGVyIG9mIHRoZSBsb3dlc3Qgc2FiZSAKcGxhbmU7IHRoZSB3YXRlciBpbiB0aGUgdHVtYmxlciAoYmVpbmcgCmxpcXVpZCBtYXR0ZXIpIGlzIGludGVycGVuZXRyYXRlZCBieSBhc3RyYWwgCm1hdHRlciBvZiB0aGUgc2Vjb25kIHN1Yi1wbGFuZSwgY291bnRpbmcgCmZyb20gdGhlIGJvdHRvbSB1cHdhcmRzOyB3aGlsZS4gdGhlIGFpcjogCndoaWNoIHN1cnJvdW5kcyBib3RoIChiZWluZyBnYXNlb3VzIG1hdHRlcikgCmlzIGludGVycGVuZXRyYXRlZCBieSBhc3RyYWwgbWF0dGVyIG9mIHRoZSAKdGhpcmQgc3ViLXBsYW5lLCBjb3VudGluZyBmcm9tIHRoZSBib3R0b20gCnVwd2FyZHMuIAoKV2UgbXVzdCBhbHNvIHJlYWxpc2UgdGhhdCBqdXN0IGFzIGFsbCAKdGhlc2UgdGhpbmdzLCB0aGUgdHVtYmxlciwgdGhlIHdhdGVyLCBhbmQgCnRoZSBhaXIsIGFyZSBpbnRlcnBlbmV0cmF0ZWQgYnkgcGh5c2ljYWwgCmV0aGVyLCBzbyBhcmUgdGhlaXIgYXN0cmFsIGNvcnJlc3BvbmRlbmNlcyAKZnVydGhlciBpbnRlcnBlbmV0cmF0ZWQgYnkgdGhlIHZhcmlldHkgb2YgCmFzdHJhbCBtYXR0ZXIgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGRpZi0gCmZlcmVudCB0eXBlcyBvZiBldGhlci4gU28gd2hlbiBhIG1hbiAKd2l0aGRyYXdzIElucyBhc3RyYWwgYm9keSBmcm9tIHRoZSBwaHlzLSAKaWNhbCB0aGVyZSBpcyBhbiBpbnJ1c2ggb2YgYWxsIHRocmVlIHZhcmllLSAKdGllcyBvZiBhc3RyYWwgbWF0dGVyLCBiZWNhdXNlIG1hbuKAmXMgcGh5cy0gCmljYWwgYm9keSBpcyBjb21wb3NlZCBvZiBzb2xpZCwgbGlxdWlkIGFuZCAKZ2FzZW91cyBjb25zdGl0dWVudHMuIE9mIGNvdXJzZSB0aGVyZSBpcyAKZXRoZXIgaW4gdGhlIHBoeXNpY2FsIGJvZHkgYXMgd2VsbCwgc28gCnRoZXJlIG11c3QgYWxzbyBiZSBhc3RyYWwgbWF0dGVyIG9mIHRoZSAKaGlnaGVyIHN1Yi1wbGFuZXMgdG8gY29ycmVzcG9uZCB0byB0aGF0LiAKClRoZSB0ZW1wb3JhcnkgYXN0cmFsIGNvdW50ZXJwYXJ0IGZvcm1lZCAKZHVyaW5nIHRoZSBhYnNlbmNlIG9mIHRoZSByZWFsIGFzdHJhbCBib2R5IAppcyB0aHVzIGFuIGV4YWN0IGNvcHkgb2YgaXQgc28gZmFyIGFzIAphcnJhbmdlbWVudCBpcyBjb25jZXJuZWQsIGJ1dCBpdCBoYXMgbm8gCgoKLCBUSEUgU1BIRVJFUyAzNjEgCgoKcmVhbCBjb25uZWN0aW9uIHdpdGggdGhlIHBoeXNpY2FsIGJvZHksIAphbmQgY291bGQgbmV2ZXIgYmUgdXNlZCBhcyBhIHZlaGljbGUuIEl0IAppcyBjb25zdHJ1Y3RlZCBvZiBhbnkgYXN0cmFsIG1hdHRlciBvZiB0aGUgCnJlcXVpcmVkIGtpbmQgdGhhdCBoYXBwZW5zIHRvIGJlIGhhbmR5OyAKaXQgaXMgbWVyZWx5IGEgZm9ydHVpdG91cyBjb25jdXJyZW5jZSBvZiAKYXRvbXMsIGFuZCB3aGVuIHRoZSB0cnVlIGFzdHJhbCBib2R5IApyZXR1cm5zIGl0IHB1c2hlcyBvdXQgdGhpcyBvdGhlciBhc3RyYWwgCm1hdHRlciB3aXRob3V0IHRoZSBzbGlnaHRlc3Qgb3Bwb3NpdGlvbi4gClRoaXMgaXMgb25lK3JlYXNvbiBmb3IgdGhlIGV4dHJlbWUgY2FyZSAKd2hpY2ggb3VnaHQgdG8gYmUgZXhlcmNpc2VkIGFzIHRvIHRoZSAKc3Vycm91bmRpbmdzIGluIHdoaWNoIHdlIHNsZWVwLCBmb3IgaWYgCnRob3NlIHN1cnJvdW5kaW5ncyBhcmUgZXZpbCwgYXN0cmFsIG1hdHRlciAKb2YgdGhlIG1vc3Qgb2JqZWN0aW9uYWJsZSB0eXBlIG1heSBmaWxsIG91ciAKcGh5c2ljYWwgYm9kaWVzIHdoaWxlIHdlIGFyZSBhd2F5IGZyb20gCnRoZW0sIGxlYXZpbmcgYmVoaW5kIGl0IGFuIGluZmx1ZW5jZSB3aGljaCAKY2Fubm90IGJ1dCByZWFjdCBob3JyaWJseSB1cG9uIHRoZSByZWFsIAptYW4gd2hlbiBoZSByZXR1cm5zLiBCdXQgdGhlIGluc3RhbnQgaW4tIApydXNoIHdoZW4gdGhlIGJvZHkgaXMgYWJhbmRvbmVkIHNob3dzIAp0aGUgZXhpc3RlbmNlIG9mIGFzdHJhbCBwcmVzc3VyZS4gCgpJbiB0aGUgc2FtZSB3YXksIHdoZW4gdGhlIG1hbiBoYXMgCmZpbmFsbHkgbGVmdCBoaXMgcGh5c2ljYWwgYm9keSBhdCBkZWF0aCwgCndoYXQgaGUgbGVhdmVzIGlzIG5vIGxvbmdlciBhIHZlaGljbGUsIGJ1dCAKYSBjb3Jwc2XigJRub3QgaW4gYW55IHRydWUgc2Vuc2UgYSBib2R5IGF0IGFsbCwgCmJ1dCBzaW1wbHkgYSBjb2xsZWN0aW9uIG9mIGRpc2ludGVncmF0aW5nIAptYXRlcmlhbCBpbiB0aGUgc2hhcGUgb2YgYSBib2R5LiBKdXN0IGFzIAp3ZSBjYW4gbm8gbG9uZ2VyIGNhbGwgdGhhdCB0cnVseSBhIGJvZHksIApzbyB3ZSBjYW5ub3QgY2FsbCB0aGUgYXN0cmFsIG1hdHRlciB3aGljaCAKaW50ZXJwZW5ldHJhdGVzIGl0IHRydWx5IGEgY291bnRlcnBhcnQgaW4gdGhlIHwgCgp9IDQ2IAoKCjM2MiBBRFlBUiBUQUxLUyAKCgpvcmRpbmFyeSBzZW5zZSBvZiB0aGUgd29yZC4gVGFrZSBhbiAKaW1wZXJmZWN0IHlldCBwZXJoYXBzIGhlbHBmdWwgYW5hbG9neS4gV2hlbiAKdGhlIGN5bGluZGVyIG9mIGFuIGVuZ2luZSBpcyBmdWxsIG9mIHN0ZWFtLCAKd2UgbWF5IHJlZ2FyZCB0aGUgc3RlYW0gYXMgdGhlIGxpdmluZyAKZm9yY2Ugd2l0aGluIHRoZSBjeWxpbmRlciwgd2hpY2ggbWFrZXMgdGhlIAplbmdpbmUgbW92ZS4gQnV0IHdoZW4gdGhlIGVuZ2luZSBpcyBjb2xkIAphbmQgYXQgcmVzdCwgdGhlIGN5bGluZGVyIGlzIG5vdCBuZWNlc3NhcmlseSAKZW1wdHk7IGl0IG1heSBiZSBmaWxsZWQgd2l0aCBhaXI7IHlldCB0aGF0IGFpciAKaXMgbm90IGl0cyBhcHByb3ByaWF0ZSBsaXZpbmcgZmVyY2UsIHRob3VnaCBpdCAKb2NjdXBpZXMgdGhlIHNhbWUgcG9zaXRpb24gYXMgZGlkIHRoZSBzdGVhbS4gCkFzdHJhbCBtYXR0ZXIgaXMgbmV2ZXIgcmVhbGx5IHNvbGlkIGF0IGFsbOKAlG9ubHkgCnJlbGF0aXZlbHkgc29saWQuIFlvdSBrbm93IHRoYXQgdGhlIG1lZGl6dmFsIAphbGNoZW1pc3RzIGFsd2F5cyBzeW1ib2xpc2VkIGFzdHJhbCBtYXR0ZXIgYnkgCndhdGVyLCBhbmQgb25lIG9mIHRoZSByZWFzb25zIGZvciB0aGF0IHdhcyAKaXRzIGZsdWlkaXR5IGFuZCBwZW5ldHJhYmlsaXR5LiBJdCBpcyB0cnVlIHRoYXQgCnRoZSBjb3VudGVycGFydCBvZiBhbnkgc29saWQgcGh5c2ljYWwgb2JqZWN0IAppcyBhbHdheXMgbWF0dGVyIG9mIHRoZSBsb3dlc3QgYXN0cmFsIHN1Yi0gCnBsYW5lLCB3aGljaCBmb3IgY29udmVuaWVuY2Ugd2Ugb2Z0ZW4gY2FsbCAKYXN0cmFsIHNvbGlkIG1hdHRlcjsgYnV0IHdlIG11c3Qgbm90IHRoZXJlLSAKZm9yZSBlbmRvdyBpdCB3aXRoIHRoZSBxdWFsaXRpZXMgd2l0aCB3aGljaCAKd2UgYXJlIGZhbWlsaWFyIGluIHNvbGlkcyBvbiB0aGlzIHBsYW5lLiBUaGUgCnBhcnRpY2xlcyBpbiB0aGF0IGRlbnNlc3Qga2luZCBvZiBhc3RyYWwgbWF0dGVyIAphcmUgZnVydGhlciBhcGFydCByZWxhdGl2ZWx5IHRvIHRoZWlyIHNpemUgCnRoYW4gZXZlbiBnYXNlb3VzIHBhcnRpY2xlczsgc28gdGhhdCBpdCB3b3VsZCAKYmUgZWFzaWVyIGZvciB0d28gb2YgdGhlIGRlbnNlc3QgYXN0cmFsIApib2RpZXMgdG8gcGFzcyB0aHJvdWdoIGVhY2ggb3RoZXIgdGhhbiBpdCAKd291bGQgYmUgZm9yIHRoZSBsaWdodGVzdCBwaHlzaWNhbCBnYXMgdG8gCmRpZmZ1c2UgaXRzZWxmIGluIHRoZSBhaXIsIHwgCgoKVEhFIFNQSEVSRVMgMzY4IAoKCk9uIHRoZSBhc3RyYWwgcGxhbmUgb25lIGhhcyBub3QgdGhlIHNlbnNlIApvZiBqdW1waW5nIG92ZXIgYSBwcmVjaXBpY2UsIGJ1dCBzaW1wbHkgb2YgCmZsb2F0aW5nIG92ZXIgaXQuIElmIHlvdSBhcmUgc3RhbmRpbmcgdXBvbiAKdGhlIGdyb3VuZCwgcGFydCBvZiB5b3VyIGFzdHJhbCBib2R5IGludGVyLSAKcGVuZXRyYXRlcyB0aGUgZ3JvdW5kIHVuZGVyIHlvdXIgZmVldDsgYnV0IAp0aHJvdWdoIHlvdXIgYXN0cmFsIGJvZHkgeW91IHdvdWxkIG5vdCBiZSAKY29uc2Npb3VzIG9mIHRoaXMgZmFjdCBieSBhbnl0aGluZyBjb3JyZXMtIApwb25kaW5nIHRvIGEgc2Vuc2Ugb2YgaGFyZG5lc3MsIG9yIGJ5IGFueSAKZGlmZmVyZW5jZSBpbiB5b3VyIHBvd2VyIG9mIG1vdGlvbi4gUmVtZW0tIApiZXIgdGhhdCB1cG9u4oCZIHRoZSBhc3RyYWwgcGxhbmUgdGhlcmUgaXMgbm8gCnNlbnNlIG9mIHRvdWNoIHRoYXQgY29ycmVzcG9uZHMgdG8gb3VycyB1cG9uIAp0aGUgcGh5c2ljYWwuIE9uZSBuZXZlciB0b3VjaGVzIHRoZSBzdXJmYWNlIApvZiBhbnl0aGluZywgc28gYXMgdG8gZmVlbCBpdCBoYXJkIG9yIHNvZnQsIApyb3VnaCBvciBzbW9vdGgsIGhvdCBvciBjb2xkOyBidXQgb24gY29taW5nIAppbnRvIGNvbnRhY3Qgd2l0aCB0aGUgaW50ZXJwZW5ldHJhdGluZyBzdWItIApzdGFuY2Ugb25lIHdvdWxkIGJlIGNvbnNjaW91cyBvZiBhIGRpZmZlcmVudCAKcmF0ZSBvZiB2aWJyYXRpb24sIHdoaWNoIG1pZ2h0IG9mIGNvdXJzZSBiZSAKcGxlYXNhbnQgb3IgdW5wbGVhc2FudCwgc3RpbXVsYXRpbmcgb3IgZGVwcmVzcy0gCmluZy4gV2hlbiBvbiBhd2FrZW5pbmcgaW4gdGhlLiBtb3JuaW5nIAp3ZSByZW1lbWJlciBhbnl0aGluZyBjb3JyZXNwb25kaW5nIHRvIApvdXIgb3JkaW5hcnkgc2Vuc2Ugb2YgdG91Y2gsIGl0IGlzIG9ubHkgdGhhdCAKaW4gYnJpbmdpbmcgdGhlIHJlbWVtYnJhbmNlIHRocm91Z2gsIHRoZSAKcGh5c2ljYWwgYnJhaW4gYWRvcHRlZCB0aGUgbWVhbnMgb2YgZXhwcmVzcy0gCmlvbiB0byB3aGljaCB3ZSBhcmUgYWNjdXN0b21lZC4gCgpUaG91Z2ggdGhlIGxpZ2h0IG9mIGFsbCBwbGFuZXMgY29tZXMgZnJvbSAKdGhlIHN1biwgeWV0IHRoZSBlZmZlY3Qgd2hpY2ggaXQgcHJvZHVjZXMgCm9uIHRoZTogYXN0cmFsIHBsYW5lIGlzIGVudGlyZWx5IGRpZmZlcmVudCBmcmFtIArigJh0aGF0LiBvbnRoZSBwaHlzaWNhbC4tIEluIGFzdHJhbCBsaWZlIHRoZXJlIAoKCjM2NCBBRFlBUi4gVEFMS1MgCgoKaXMgYSBkaWZmdXNlZCBsdW1pbm9zaXR5LCBub3Qgb2J2aW91c2x5IGNvbWluZyAKZnJvbSBhbnkgc3BlY2lhbCBkaXJlY3Rpb24uIEFsbCBhc3RyYWwgbWF0dGVyIAppcyBpbiBpdHNlbGYgbHVtaW5vdXMsIGFuZCBhbiBhc3RyYWwgYm9keSBpcyAKbm90IGxpa2UgYSBwYWludGVkIHNwaGVyZSwgYnV0IHJhdGhlciBhIApzcGhlcmUgb2YgSml2aW5nIGZpcmUuIEl0IDFzIGFsc28gdHJhbnNwYXJlbnQsIAphbmQuIHRoZXJlIGFyZSBubyBzaGFkb3dzLiBJdCBpcyBuZXZlciBkYXJrIAppbiB0aGUgYXN0cmFsIHdvcmxkLiBUaGUgcGFzc2luZyBvZiBhIHBoeXNpY2FsIApjbG91ZCBiZXR3ZWVuIHVzIGFuZCB0aGUgc3VuIG1ha8OpcyBubyAKZGlmZmVyZW5jZSB3aGF0ZXZlciB0byB0aGUgYXN0cmFsIHBsYW5lLCBub3IgCm9mIGNvdXJzZSBkb2VzIHRoZSBzaGFkb3cgb2YgdGhlIGVhcnRoIHdoaWNoIAp3ZSBjYWxsIG5pZ2h0LiAKClRoZSBpbnZpc2libGUgaGVscGVyIHdvdWxkIG5vdCBwYXNzIHRocm91Z2ggCmEgbW91bnRhaW4sIGlmIGhlIHRob3VnaHQgb2YgaXQgYXMgYW4gb2ItIApzdGFjbGU7IHRvIGxlYXJuIHRoYXQgaXQgaXMgbm90IGFuIG9ic3RhY2xlIAppcyBwcmVjaXNlbHkgdGhlIG9iamVjdCBvZiBvbmUgcGFydCBvZiB3aGF0IAppcyBDYWxsZWQg4oCYdGhlIHRlc3Qgb2YgY2FydGgu4oCZIFRoZXJlIGNhbi0gCm5vdCBiZSBhbiBhY2NpZGVudCBvbiB0aGUgYXN0cmFsIHBsYW5lIGluIApvdXIgc2Vuc2Ugb2YgdGhlIHdvcmQsIGJlY2F1c2UgdGhlIGFzdHJhbCAKYm9keSwgYmVpbmcgZmx1aWRpYywgY2Fubm90IGJlIGRlc3Ryb3llZCBvciAKcGVybWFuZW50bHkgaW5qdXJlZCwgYXMgdGhlIHBoeXNpY2FsIGJvZHkgCmNhbi4gQW4gZXhwbG9zaW9uIG9uIHRoZSBhc3RyYWwgcGxhbmUgCm1pZ2h0IGJlIHRlbXBvcmFyaWx5IGFzIGRpc2FzdHJvdXMgYXMgYW4gCmV4cGxvc2lvbiBvZiBndW5wb3dkZXIgb24gdGhlIHBoeXNpY2FsLCAKYnV0IHRoZSBhc3RyYWwgZnJhZ21lbnRzIHdvdWxkIHF1aWNrbHkgCmNvbGxlY3QgdGhlbXNlbHZlcyBhZ2Fpbi4gCgpQZW9wbGUgb24gdGhlIGFzdHJhbCBwbGFuZSBjYW4gYW5kIGRvIApwYXNzIHRocm91Z2ggb25lIGFub3RoZXIgY29uc3RhbnRseTsgYW5kIAp0aHJvdWdoIGZpeGVkIGFzdHJhbCAuIG9iamVjdHMuIFJlbWVtYmVyIAoKClRIRSBTUEhFUkVTIDM2NSAKCgp0aGF0IG9uIHRoZSBhc3RyYWwgcGxhbmUgbWF0dGVyIGlzIHNvIG11Y2ggCm1vcmUgZmx1aWRpYyBhbmQgc28gbXVjaCBsZXNzIGRlbnNlbHkgYWctIApncmVnYXRlZC4gVGhlcmUgbmV2ZXIgY2FuIGJlIGFueXRoaW5nIGxpa2UgCndoYXQgd2UgbWVhbiBieSBhIGNvbGxpc2lvbiwgYW5kIHVuZGVyIApvcmRpbmFyeSBjaXJjdW1zdGFuY2VzIHR3byBib2RpZXMgd2hpY2ggaW4tIAp0ZXJwZW5ldHJhdGUgYXJlIG5vdCBldmVuIGFwcHJlY2lhYmx5IGFmZmVjdGVkLiAKSWYsIGhvd2V2ZXIsIHRoZSBpbnRlcnBlbmV0cmF0aW9uIGxhc3RzIGZvciBzb21lIAp0aW1lLCBhcyBpdCBkb2VzLCBmb3IgZXhhbXBsZSwgd2hlbiB0d28gcGVyLSAKc29ucyBzaXQgc2lkZSBieSBzaWRlIHRocm91Z2ggYSBzZXJ2aWNlIAppbiBhIGNodXJjaCBvciBhIHBlcmZvcm1hbmNlIGluIGEgdGhlYS0gCnRyZSwgYSBjb25zaWRlcmFibGUgZWZmZWN0IG1heSBiZSBwcm9kdWNlZC4gCgpUaGVyZSBhcmUuIG1hbnkgY3VycmVudHMgd2hpY2ggdGVuZCB0byAKY2FycnkgYWJvdXQgcGVyc29ucyB3aG8gYXJlIGxhY2tpbmcgaW4gCndpbGwsIGFuZCBldmVuIHRob3NlIHdobyBoYXZlIHdpbGwgYnV0IApkbyBub3Qga25vdyBob3cgdG8gdXNlIGl0LiBEdXJpbmcgCnBoeXNpY2FsIGxpZmUgdGhlIG1hdHRlciBvZiBvdXIgYXN0cmFsIGJvZGllcyAKaXMgY29uc3RhbnRseSBpbiBtb3Rpb24sIOKAnHdoaWxlIGFmdGVyIGRlYXRoLCAKdW5sZXNzIHRoZSB3aWxsIGlzIGV4ZXJjaXNlZCBmb3IgdGhlIHB1cnBvc2UgCm9mIHByZXZlbnRpbmcgaXQsIGl0IDFzIGFycmFuZ2VkIGluIGNvbmNlbnRyaWMgCnNoZWxscyB3aXRoIGEgY3J1c3Qgb2YgdGhlIGNvYXJzZXN0IG1hdHRlciAKb24gdGhlIG91dHNpZGUuIElmIGEgbWFuIHdpc2hlcyB0byBiZSBvZiAKc2VydmljZSBvbiB0aGUgYXN0cmFsLCB0aGlzIHNoZWxsaW5nIG11c3QgYmUgCnByZXZlbnRlZCwgZm9yIHRob3NlIHdob3NlIGFzdHJhbCBib2RpZXMgaGF2ZSAKYmVlbiB0aHVzIHJlLWFycmFuZ2VkIGFyZSBjb25maW5lZCB0byBvbmUgCmxldmVsLiBJZiB0aGUgcmUtYXJyYW5nZW1lbnQgaGFzIGFscmVhZHkgb2MtIApjdXJyZWQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGlzIGRvbmUgd2hlbiBhIApwZXJzb24gaXMgdGFrZW4gaW4gaGFuZCBpcyB0byBicmVhazogdXAgCnRoYXQgY29uZGl0aW9uIGFuZCBzZXQgaGltIGZyZWUgb24gdGhlIAoKCjg2NiDigJxBRFlBUiBUQUxLUyAKCgp3aG9sZSBvZiB0aGUgYXN0cmFsIHBsYW5lLiBGb3IgdGhvc2Ugd2hvIAphcmUgYWN0aW5nIGFzIGludmlzaWJsZSBoZWxwZXJzIG9uIHRoZSBhc3RyYWwgCnBsYW5lIHRoZXJlIGFyZSBubyBzZXBhcmF0ZSBsZXZlbHM7IGl0IGlzIGFsbC4gCm9uZS4gOiAKCkluIEluZGlhIHRoZSBpZGVhIG9mIHNlcnZpY2Ugb24gdGhlIAphc3RyYWwgcGxhbmUgaXMgbm90IHNvIHdpZGVseSBrbm93biBhcyBpbiAKdGhlIFdlc3Q7IHRoZSBpZGVhIG9mIHNlcnZpY2UgdG8gR29kIGZvciAKdGhlIGF0dGFpbm1lbnQgb2YgbGliZXJhdGlvbiBpcyBtb3JlIHByb21pLSAKbmVudCB0aGFuIHRoYXQgb2Ygc2VydmljZSB0byBvbmXigJlzIGZlbGxvdy0gCm1lbi4gQXRtb3NwaGVyaWMgYW5kIF8gY2xpdGhhdGljIGNvbmRpdGlvbnMgCm1ha2UgcHJhY3RpY2FsbHkgbm8gZGlmZmVyZW5jZSB0byB3b3JrIG9uIAp0aGUgYXN0cmFsIGFuZCBtZW50YWwgcGxhbmVzLiBCdXQgYmVpbmcgCmluIGEgYmlnIGNpdHkgZG9lcyBtYWtlIGEgZ3JlYXQgZGlmZmVyZW5jZSwgCm9uIGFjY291bnQgb2YgdGhlIG1hc3NlcyBvZiB0aG91Z2h0LWZvcm1zLiAKU29tZSBwc3ljaGljcyByZXl1aXJlIGEgdGVtcGVyYXR1cmUgb2YgYWJvdXQgCmVpZ2h0eSBkZWdyZWVzIGluLiBvcmRlciB0byBkbyB0aGVtIGJlc3QgCndvcmssIHdoaWxlIG90aGVycyBkbyBub3Qgd29yayB3ZWxsIGV4Y2VwdCAKYXQgYSBsb3dlciB0ZW1wZXJhdHVyZSwgCgpJZiBuZWNlc3NhcnksIG9jY3VsdCB3b3JrIGNhbiBiZSBkb25lIAphbnl3aGVyZSwgYnV0IHNvbWUgcGxhY2VzIGFmZm9yZCB2cmVhdGVyIApmYWNpbGl0aWVzIHRoYW4gb3RoZXJzLiBGb3IgZXhhbXBsZSwgQ2FsaWZvci0gCm5pYSBoYXMgYSB2ZXJ5IGRyeSBjbGltYXRlIHdpdGggbXVjaCAKZWxlY3RyaWNpdHkgaW4gdGhlIGFpciwgd2hpY2ggaXMgZmF2b3VyYWJsZSAKZm9yIHRoZSBkZXZlbG9wbWVudCBvZiBjbGFpcnZveWFuY2UuIEhlcmUgCmluIEFkeWFyIHRoZXJlIGlzIG5vIHJlc2lzdGFuY2UgdG8gb3VyIAp0aG91Z2h0LWZvcm1zIG9uIGFjY291bnQgb2YgdGhlIGVudmlyb25tZW50LCAKYmVjYXVzZSAtd2UtIGFyZSBhbGwtdGhpbmtpbmcuLW1vcmUgb3IgbGVncy4gCmFsb25nIHRoZSBzYW3DqX4gbGluZXMuIEJ1dOKAmSB3ZSBtdXN0LiAtcmUtIAoKClRIRSBTUEhFUkVTIDM2NyAKCgptZW1iZXIgdGhhdCB0aGVyZSBtYXkgYWx3YXlzIGJlIHJlc2lzdGFuY2UgCm9uIHRoZSBwYXJ0IG9mIHRoZSBwZXJzb24gdG8gd2hvbSB3ZSBhcmUgCnNlbmRpbmcgdGhvdWdodHMsIGZvciBzb21lIHBlcnNvbnMgaGF2ZSAKZm9yIGEgd2hvbGUgbGlmZS10aW1lIGJ1aWx0IHJvdW5kIHRoZW0tIApzZWx2ZXMgc3VjaCBzaGVsbHMgb2Ygc2VsZmlzaG5lc3MgdGhhdCBvbmUgCmNhbm5vdCBwZW5ldHJhdGUgdGhlbSBldmVuIHdoZW4gb25lIHdpc2hlcyAKdG8gZG8gdGhlbSBnb29kLiAKCgpGaWZ0aCBTZWN0aW9uIAoKClFoZSBFZ28gYW5kIEhpcyBWZWhpY2xlcyAKCgo0NyAKCgpGSUZUSCBTRUNUSU9OIApUdWUgQnUmIEFORCBUSEUgUEVSU09OQUxJVFkgCgoKVGhlcmUgYXJlIHN0aWxsIG1hbnkgb2Ygb3VyIG1lbWJlcnMgCndobyBkbyB1b3QgZnVsbHkgdW5kZXJzdGFuZCB0aGUgcHJvYmxlaW4gCm9mIHRoZSBoaWdoZXIgYW5kIHRoZSBsb3dlciBzZWxmLiBOb3IgaXMgCnRoaXMgd29uZGVyZnVsOyBmb3Igd2UgYXJlIHJlcGVhdGVkbHkgdG9sZCAKdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBjb25zY2lvdXNuZXNzLCBhbmQgCnlldCB3ZSBvZnRlbiBjbGVhcmx5IGZlZWwgdHdvLCBzbyBpdCBpcyBub3QgCnJlbWFya2FibGUgdGhhdCBzdHVkZW50cyBzaG91bGQgYmUgdW4tIApjZXJ0YWluIGFzIHRvIHRoZSByZWFsIHJlbGF0aW9uIGJldHdlZW4gCnRoZXNlIHR3bywgYW5kIHNob3VsZCB3b25kZXIgd2hldGhlciB0aGUgCmVnbyAxOCBlbnRpcmVseSBkaXNzb2NpYXRlZCBmcm9tIGhpcyBwaHlzaWNhbCAKYm9keSBhbmQgaGFzIGFuIGV4aXN0ZW5jZSBvZiBoaXMgb3duIGFtb25nIApoaXMgZmVsbG93cyBvbiBoaXMgb3duIHBsYW5lLiA3IAoKVGhpcyBwcm9ibGVtIG9mIHRoZSBsb3dlciBhbmQgaGlnaGVyIHNlbGYgCmlzIGFuIG9sZCBvbmUsIGFuZCBpdCBpcyB1bmRvdWJ0ZWRseSBkaWZmaWN1bHQgCnRvIHJlYWxpc2UgdGhhdCB0aGVyZSBpcyBhZnRlciBhbGwgb25seSBvbmUgCmNvbnNjaW91c25lc3MsIGFuZCB0aGF0IHRoZSBhcHBhcmVudCBkaWZmZXItIAplbmNlIGlzIGNhdXNlZCBvbmx5IGJ5IHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgCnZhcmlvdXMgdmVoaWNsZXMuIFRoZSB3aG9sZSBjb25zY2lvdXNuZXNzIAoKCjM3MiBBRFlBUiBUQUxLUyAKCgp3b3JrcyBvbiBpdHMgb3duIGhpZ2hlciBtZW50YWwgcGxhbmUsIApidXQgaW4gdGhlIGNhc2Ugb2YgdGhlIG9yZGluYXJ5IG1hbiBvbmx5IApwYXJ0aWFsbHkgYW5kIHZhZ3VlbHkgYXMgeWV0LiBTbyBmYXIgYXMgCml0IGlzIGFjdGl2ZSBpdCBpcyBhbHdheXMgb24gdGhlIHNpZGUgb2YgCnllb2QsIGJlY2F1c2UgaXQgZGVzaXJlcyB0aGF0IHdoaWNoIGlzIApmYXZvdXJhYmxlIHRvLiBpdHMgZXZvbHV0aW9uIGFzIGEgc291bC4gSXQgCnBhdHMgYSBwb3J0aW9uIG9mIGl0c2VsZiBkb3duIGludG8gbG93ZXIgCm1hdHRlciwgYW5kIHRoYXQgcG9ydGlvbiBiZWNvbWVzIHNvIG11Y2ggCm1vcmUga2Vlbmx5IGFuZCB2aXZpZGx5IGNvbnNjaW91cyBpbiB0aGF0IAptYXR0ZXIgdGhhdCBpdCB0aGlua3MgYW5kIGFjdHMgYXMgdGhvdWdoIAppdCB3ZXJlIGEgc2VwYXJhdGUgYmVpbmcsIGZvcmdldHRpbmcgaXRzIApjb25uZWN0aW9uIHdpdGggdGhhdCBsZXNzIGRldmVsb3BlZCB5ZXQgZmFyIAp3aWRlciBzZWxmLWNvbnNjaW91c25lc3MgYWJvdmUuIFNvIHNvbWUtIAp0aW1lcyBpdCBzZWVtcyBhcyB0aG91Z2ggdGhlIGZyYWdtZW50IAp3ZXJrZWQgYWdhaW5zdCB0aGUgd2hvbGU7IGJ1dCB0aGUgbWFuIAp3aG8gMXMgaW5zdHJ1Y3RlZCBkZWNsaW5lcyB0byBiZSBkZWx1ZGVkLCAKYW5kIHJlYWNoZXMgYmFjayB0aHJvdWdoIHRoZSBrZWVuIGFsZXJ0IApjb3VzY2lvdXNuZXNzIG9mIHRoZSBmcmFnbWVudCB0byB0aGUgdHJ1ZSAKY2Vuc2Npb3VzbmVzcyBiZWhpbmQsIHdoaWNoIGlzIGFzIHlldCBzbyAKbGl0bGUgZGV2ZWxvcGVkLiAKClVuZG91YnRlZGx5IHRoZSBlZ28gaXMgb25seSB2ZXJ5IHBhcnRpYWwtIApseSBleHByZXNzZWQgYnkgaGlzIHBoeXNpY2FsIGJvZHksIHlldCB3ZSAKc2hvdWxkIG5vdCBiZSBhY2N1cmF0ZSBpbiBzcGVha2luZyBvZiBoaW0gCmFzIGRpc3NvY2lhdGVkIGZyb20gdGhhdCBib2R5LiBJZiB3ZSAKZmlndXJlIHRoZSBlZ28gYXMgYSBzb2xpZCBib2R5IGFuZCB0aGUgCnBoeXNpY2FsIHBsYW5lIGFzIGEgc3VyZmFjZSwgdGhlIHNvbGlkIGJvZHkgCmlmIGxhaWQgdXBvbiB0aGF0IHN1cmZhY2UgY291bGQgbWFuaWZlc3QgCml0c2VsZiB0aHJvdWdoIHRoYXQgc3VyZmFjZSBvbmx5IGFzIGEgcGxhbmUgCgoKVEhFIEVHTyBBTkQgVEhFIFBFUlNPTkFMSVRZIDM3OSAKCgpmaWd1cmUsIHdoaWNoIHdvdWxkIG9idmlvdXNseSBiZSBhbiBleC0gCmNlZWRpbmdseSBwYXJ0aWFsIGV4cHJlc3Npb24uIFdlIGNhbiBfIHNlZSAKYWxzbyB0aGF0IGlmIHRoZSB2YXJpb3VzIHNpZGVzIG9mIHRoZSBzb2xpZCAKd2VyZSBsYWlkIHVwb24gdGhlIHN1cmZhY2Ugc3VjY2Vzc2l2ZWx5IHdlIAptaWdodCBvYnRhaW4gZXhwcmVzc2lvbnMgd2hpY2ggZGlmZmVyZWQgY29uLSAKc2lkZXJhYmx5LCB0aG91Z2ggYWxsIG9mIHRoZW0gd291bGQgYmUgCmltcGVyZmVjdCwgYmVjYXVzZSBpbiBhbGwgY2FzZXMgdGhlIHNvbGlkIAp3b3VsZCBoYXZlIGFuIGV4dGVuc2lvbiBpbiBhbl8gZW50aXJlbHkgCmRpZmZlcmVudCBkaXJlY3Rpb24sIHdoaWNoIGNvdWxkIGJ5IG5vIG1lYW5zIApiZSBleHByZXNzZWQgaW4gdGhlIHR3byBkaW1lbnNpb25zIG9mIHRoZSAKc3VwZXJmaWNpZXMuIFdlIHNoYWxsIG9idGFtIGEgbmVhcmx5IAphY2N1cmF0ZSBzeW1ib2xpc20gb2YgdGhlIGZhY3RzIGFzIGZhciBhcyAKdGhlIG9yZGluYXJ5IG1hbiBpcyBjb25jZXJuZWQgaWYgd2UgCnN1cHBvc2UgdGhlIHNvbGlkIHRvIGJlIGNvbnNjaW91cyBvbmx5IHNvIApmYXIgYXMgaXQgaXMgaW4gY29udGFjdCB3aXRoIHRoZSBzdXJmYWNlLCAKYWx0aG91Z2ggdGhlIHJlc3VsdHMgZ2FtZWQgdGhyb3VnaCB0aGUgCm1hbmlmZXN0YXRpb24gb2Ygc3VjaCBjb25zY2lvdXNuZXNzIHdvdWxkIAppbmhlcmUgaW4gdGhlIHNvbGlkIGFzIGEgd2hvbGUsIGFuZCB3b3VsZCAKYmUgcHJlc2VudCBpbiBhbnkgbGF0ZXIgZXhwcmVzc2lvbiBvZiBpdCwgCmV2ZW4gdGhvdWdoIHRoYXQgbWlnaHQgZGlmZmVyIGNvbnNpZGVyYWJseSAKZnJvbSBwcmV2aW91cyBleHByZXNzaW9ucy4gCgpJdCBpcyBvbmx5IG0gdGhlIGNhc2Ugb2YgdGhvc2UgYWxyZWFkeSAKc29tZXdoYXQgYWR2YW5jZWQgdGhhdCB3ZSBjYW4gc3BlYWsgb2YgCnRoZSBlZ28gYXMgaGF2aW5nIGEgY29uc2Npb3VzIGV4aXN0ZW5lZSAKYW1vbmcgaGlzIGZlbGxvd3Mgb24gaGlzIG93biBwbGFuZS4gRnJvbSAKdGhlIG1vbWVudCB0aGF0IGhlIGJyZWFrcyBvZmYgZnJvbSBoaXMgCmdyb3VwLXNvdWwgYW5kIGNvbW1lbmNlcyBoaXMgXyBzZXBhcmF0ZSAKZXhpc3RlbmNlLCBoZSBpcyBhIGNvbnNjaW91cyBlbnRpdHk7IGJ1dCAKCgozNzQgQURZQVIgVEFMS1MgCgoKdGhlIGNvbnNjaW91c25lc3MgaXMgb2YgYW4gZXhjZWVkaW5nbHkgCnZhZ3VlIG5hdHVyZS4gVGhlIG9ubHkgcGh5c2ljYWwgc2Vuc2EtIAp0aW9uIHRvIHdoaWNoIGl0IGlzIGF0IGFsbCBjb21wYXJhYmxlIGlzIAp0aGF0IHdoaWNoIG9jY2FzaW9uYWxseSBjb21lcyB0byBzb21lIApwZXJzb25zIGF0IHRoZSBtb21lbnQgb2YgYXdha2VuaW5nIGluIAp0aGUgbW9ybmluZy4gVGhlcmUgaXMgYSAtc3RhdGUgaW50ZXJtZWRpYXRlIApiZXR3ZWVuIHNsZWVwaW5nIGFuZCB3YWtpbmcgaW4gd2hpY2ggYSAKbWFuIGlzIGJsaXNzZnVsbHkgY29uc2Npb3VzIHRoYXQgaGUgZXhpc3RzLCAKYW5kIHlldCBpcyBub3QgY29uc2Npb3VzIG9mIHNhbnkgc3Vycm91bmQtIAppbmcgb2JqZWN0cywgbm90IGNhcGFibGUgb2YgYW55IG1vdmVtZW50LiAKSW5kZWVkLCBoZSBzb21ldGltZXMga25vd3MgdGhhdCBhbnkgbW92ZS0gCm1lbnQgd291bGQgYnJlYWsgdGhlIHNwZWxsIG9mIGhhcHBtZXNzIAphbmQgYnJpbmcgaGltIGRvd24gaW50byB0aGUgb3JkaW5hcnkgCndha2luZyB3b3JsZCwgYW5kIHNvIGhlIGVuZGVhdm91cnMgdG8gCnJlbWFpbiBzdGlsbCBhcyBsb25nIGFzIHBvc3NpYmxlLiAKClRoYXQgY29uZGl0aW9u4oCUYSBjb25zY2lvdXNuZXNzIG9mIGV4aXN0LSAKZW5jZSBhbmQgb2YgaW50ZW5zZSBibGlzc+KAlGNsb3NlbHkgcmVzZW1ibGVzIAp0aGF0IG9mIHRoZSBlZ28gb2YgdGhlIGF2ZXJhZ2UgbWFuIHVwb24gdGhlIApoaWdoZXIgbWVudGFsIHBsYW5lLiBIZSBpcyB3aG9sbHkgY2VudHJlZCAKdGhlcmUgb25seSBmb3IgdGhlIHNob3J0IHRpbWUgd2hpY2ggaW50ZXItIAp2ZW5lcyBiZXR3ZWVuIHRoZSBlbmQgb2Ygb25lIGxpZmUgaW4gdGhlIApoZWF2ZW4td29ybGQgYW5kIHRoZSBjb21tZW5jZW1lbnQgb2YgaGlzIApuZXh0IGRlc2NlbnQgaW50byBpbmNhcm5hdGlvbjsgYW5kIGR1cmluZyAKdGhhdCBzaG9ydCBwZXJpb2QgdGhlcmUgY29tZXMgdG8gaGltIHRoZSAKZmxhc2ggb2YgcmV0cm9zcGVjdCBhbmQgcHJvc3BlY3TigJRhIGdsaW1wc2UgCm9mIHdoYXQgaGlzIGxhc3QgbGlmZSBoYXMgZG9uZSBmb3IgaGltLCBhbmQgb2YgCndoYXQgaGlzIG5leHQgbGlmZSBpcyBpbnRlbmRlZCB0byBkby4gRm9yIAptYW55IGFnZXMgdGhlc2UgZ2xpbXBzZXMgYXJlIGhpcyBvbmx5IAoKClRIRSBFR08gQU5EIFRIRSBQRVJTT05BTElUWSAzNzUgCgoKbW9tZW50cyBvZiBmdWxsIGF3YWtlbmluZywgYW5kIGl0IGlzIGhpcyAKZGVzaXJlIGZvciBhLCBtb3JlIHBlcmZlY3QgbWFuaWZlc3RhdGlvbiwgaGlzIApkZXNpcmUgdG8gZmVlbCBoaW1zZWxmIG1vcmUgdGhvcm91Z2hseSBhbGl2ZSAKYW5kIGFjdGl2ZSwgd2hpY2ggZHJpdmVzIGhpbSBpbnRvIHRoZSBlZmZvcnQgCm9mIGluY2FybmF0aW9uLiBJdCBpcyBub3QgZGVzaXJlIGZvciBsaWZlIGluIAp0aGUgb3JkaW5hcnkgc2Vuc2Ugb2YgdGhlIHdvcmQsIGJ1dCByYXRoZXIgCmZvciB0aGF0IGNvbXBsZXRlIGNvbnNjaW91c25lc3Mgd2hpY2ggaW4tIAp2b2x2ZXMgdGhlIHBvd2VyIHRvIHJlc3BvbmQgdG8gYWxsIHBvc3NpYmxlIAp2aWJyYXRpb25zIGZyb20gdGhlIHN1cnJvdW5kaW5ncyBvbiBldmVyeSAKcGxhbmUsIHNvIHRoYXQg4oCcaGUgbWF5IGF0dGFpbiB0aGUgcGVyZmVjdGlvbiAKb2Ygc3ltcGF0aHkuIAoKV2hlbiB0aGUgZWdvIGlzIHN0aWxsIHVuZGV2ZWxvcGVkIHRoZSAKZm9yY2VzIG9mIHRoZSBoaWdoZXIgbWVudGFsIHBsYW5lIHBhc3MgdGhyb3VnaCAKaGltIHByYWN0aWNhbGx5IHdpdGhvdXQgYWZmZWN0aW5nIGhpbSwgYXMgaGUgCmNhbm5vdCByZXNwb25kIHRvIG1vcmUgdGhhbiBhIHZlcnkgZmV3IApvZiB0aGVzZSBleHRyZW1lbHkgZmluZSB2aWJyYXRpb25zLiBJdCBuZWVkcyAKcG93ZXJmdWwgYW5kIGNvbXBhcmF0aXZlbHkgY29hcnNlIHZpYnJhdGlvbnMgCnRvIGFmZmVjdCBoaW0gYXQgZmlyc3QsIGFuZCB0aGVzZSBkbyBub3QgZXhpc3QgCnVwb24gaGlzIG93biBwbGFuZSwgYW5kIGZvciB0aGF0IHJlYXNvbiAKaGUgaGFzIHRvIHB1dCBoaW1zZWxmIGRvd24gdG8gbG93ZXIgbGV2ZWxzIAppbiBvcmRlciB0byBmaW5kIHRoZW0uIFRoZXJlZm9yZSBmdWxsIApjb25zY2lvdXNuZXNzIGNvbWVzIHRvIGhpbSBhdCBmaXJzdCBvbmx5IAppbiB0aGUgbG93ZXN0IGFuZCBkZW5zZXN0IG9mIGhpcyB2ZWhpY2xlcywgCmhpcyBhdHRlbnRpb24gYmVpbmcgZm9jdXNzZWQgZm9yIGEgbG9uZyB0aW1lIApkb3duIGluIHRoZSBwaHlzaWNhbCBwbGFuZSA7IHNvIHRoYXQsIGFsdGhvdWdoIAp0aGF0IHBsYW5lIGlzIHNvIG11Y2ggbG93ZXIgdGhhbiBoaXMgb3duIAphbmQgb2ZmZXJzIHNvIG11Y2ggbGVzcyBzY29wZSBmb3IgYWN0aXZpdHksIAppbiB0aG9zZSBlYXJseSBzdGFnZXMgaGUgZmVlbHMgaGltc2VsZiBtdWNoIAoKCjM3NiBBRFlBUiBUQUxLUyAKCgptb3JlIGFsaXZlIHdoZW4gaGUgaXMgd29ya2luZyB0aGVyZS4gQXNfIAp0aGUgY29uc2Npb3VzbmVzcyBpbmNyZWFzZXMgYW5naSB3aWRlbnMgaXRzIApzY29wZSBoZSBncmFkdWFsbHkgYmVnaW5zIHRvIHdvcmsgbW9yZSBhbmQgCm1vcmUgaW4gbWF0dGVyIG9uZSBzdGFnZSBCSWdEZXIgdGFudCBpcywgaW4tIAphc3RyYWwgbWF0dGVyLiAKCkF0IGEgbXVjaCBsYXRlciBzdGFnZSwgd2hlbiBoZSBoYXMgCmF0dGFpbmVkIHRvIGNsZWFyIHdvcmtpbmcgaW4gYXN0cmFsIG1hdHRlciwgCmhlIGJlZ2lucyB0byBiZSBhYmxlIGFsc28gdG8gZXhwcmVzcyBoaW1zZWxmIAp0aHJvdWdoIHRoZSBtYXR0ZXIgb2YgaGlzICwgbWVudGFsIGJvZHksIAphbmQgdGhlIGVuZCBvZiBoaXMgcHJlc2VudCBlZmZvcnQgaXMgYWNoaWV2ZWQgCndoZW4gaGUgd29ya3MgYXMgZnVsbHkgYW5kIGNsZWFybHkgaW4gdGhlIAptYXR0ZXIgb2YgdGhlIGNhdXNhbCBib2R5IG9uIHRoZSBoaWdoZXIgCm1lbnRhbCBwbGFuZSBhcyBoZSBkb2VzIG5vdyBvbl8gdGhlIApwaHlzaWNhbCBwbGFuZS4gCgpUaGVzZSBzdGFnZXMgb2YgZnVsbCBkZXZlbG9wbWVudCBvZiBjb24tIApzY2lvdXNuZXNzIG11c3Qgbm90IGJlIGNvbmZvdW5kZWQgd2l0aCB0aGUgCm1lcmUgbGVhcm5pbmcgdG8gdXNlIHRvIHNvbWUgZXh0ZW50IHRoZSAKcmVzcGVjdGl2ZSB2ZWhpY2xlcy4gQSBtYW4gaXMgdXNpbmcgaGlzIGFzdHJhbCAKYm9keSB3aGVuZXZlciBoZSBleHByZXNzZXMgYW4gZW1vdGlvbjsgaGUgCmlzIHVzaW5nIGhpcyBtZW50YWwgYm9keSB3aGVuZXZlciBoZSB0aGlua3MuIApCdXQgdGhhdCBpcyB2ZXJ5IGZhciBmcm9tIGJlaW5nIGFibGUgdG8gCnV0aWxpc2UgZWl0aGVyIG9mIHRoZW0gYXMgaW5kZXBlbmRlbnQgdmVoaWNsZXMgCnRocm91Z2ggd2hpY2ggY29uc2Npb3VzbmVzcyBjYW4gYmUgZnVsbHkgCmV4cHJlc3NlZC4gV2hlbiBhIG1hbiBpcyBmdWxseSBjb25zY2lvdXMgCmluIGhpcyBhc3RyYWwgYm9keSwgaGUgaGFzIGFscmVhZHkgbWFkZSBhIApjb25zaWRlcmFibGUgYW1vdW50IG9mIHByb2dyZXNzOyB3aGVuIGhlIApoYXMgYnJpZGdlZCBvdmVyIHRoZSBjaGFzbSBiZXR3ZWVuIHRoZSAKYXN0cmFsIGNvbnNjaW91c25lc3MgYW5kIHRoZSBwaHlzaWNhbCwgZGF5IAoKCl8gCgoKVEhFIEVHTyBBTkQgVEhFIFBFUlNPTkFMSVRZIDMwNCAKCgphbmQgbmlnaHQgbm8gbG9uZ2VyIGV4aXN0IGZvciBoaW0sIHNpbmNlIGhlIApsZWFkcyBhIGxpZmUgdW5icm9rZW4gaW4gaXRzIGNvbnRpbnVpdHkuIApGb3IgaGltOiBkZWF0aCBhbHNvIGhhcyBjZWFzZWQgdG8gZXhpc3QsIApzaW5jZSBoZSBjYXJyaWVzIHRoYXQgdW5icm9rZW4gY29uc2Npb3VzbmVzcyAKbm90IG9ubHkgdGhyb3VnaCBuaWdodCBhbmQgZGF5LCBidXQgYWxzbyAKdGhyb3VnaCB0aGUgcG9ydGFscyBvZiBkZWF0aCBpdHNlbGYgYW5kIHVwIAp0byB0aGUgZW5kIG9mIGhpcyBsaWZlIHVwb24gdGhlIGFzdHJhbCBwbGFuZS4gCgpPbmUgc3RlcCBvZiBmdXJ0aGVyIGRldmVsb3BtZW50IGhlcyBvcGVuIAp0byBoaW3igJR0aGUgZ29uc2Npb3VzbmVzcyBvZiB0aGUgaGVhdmVuLSAKd29ybGQ7IGFuZCB0aGVuIGhpcyBoZmUgYW5kIG1lbW9yeSBhcmUgCmNvbnRpbnVvdXMgZHVyaW5nIHRoZSB3aG9sZSBvZiBlYWNoIGRlc2NlbnQgCmludG8gaW5jYXJuYXRpb24uIFlldCBvbmUgc3RlcCBtb3JlIHJhaXNlcyAKdGhlIGZ1bGwgY29uc2Npb3VzbmVzcyB0byB0aGUgbGV2ZWwgb2YgdGhlIAplZ28gb24gdGhlIGhpZ2hlciBtZW50YWwgcGxhbmUsIGFuZCBhZnRlciAKdGhhdCBoZSBoYXMgYWx3YXlzIHdpdGggaGltIHRoZSBtZW1vcnkgCm9mIGFsbCBoaXMgaHZlcywgYW5kIGhlIGlzIGNhcGFibGUgb2YgY29uLSAKc2Npb3VzbHkgZGlyZWN0aW5nIHRoZSB2YXJpb3VzIGxvd2VyIG1hbmktIApmZXN0YXRpb25zIG9mIGhpbXNlbGYgYXQgYWxsIHBvbXRzIG9mIGhpcyAKcHJvZ3Jlc3MuIAoKSXQgbXVzdCBub3QgYmUgc3VwcG9zZWQgdGhhdCB0aGUgZGV2ZWxvcC0gCm1lbnQgb2YgYW55IG9mIHRoZXNlIHN0YWdlcyBvZiBjb25zY2lvdXNuZXNzIAppcyBldmVyIHN1ZGRlbi4gVGhlIGFjdHVhbCByZW5kaW5nIG9mIHRoZSB2ZWlsIApiZXR3ZWVuIHR3byBzdGFnZXMgaXMgdXN1YWxseSBhIGZhaXJseSByYXBpZCAKcHJvY2Vzcywgc29tZXRpbWVzIGV2ZW4gaW5zdGFudGFuZW91cy4gPEEgCm1hbiB3aG8gaGFzIG5vcm1hbGx5IG5vIG1lbW9yeSBvZiB3aGF0IApoYXBwZW5zIG9uIHRoZSBhc3RyYWwgcGxhbmUgbWF5IHVuaW50ZW4tIAp0aW9uYWxseSwgYnkgc29tZSBhY2NpZGVudCBvciBpbGxuZXNzLCBvciAKCgppbnRlbnRpb25hbGx5IGJ5IGNlcnRhaW4gZGVmaW5pdGUgcHJhY3RpY2VzLCAKNDggCgoKMzc4IEFEWUFSIFRBTEtTIAoKCmJyaWRnZSBvdmVyIHRoZSBpbnRlcnZhbCBhbmQgbWFrZSB0aGUgCmNvbm5lY3Rpb24sIHNvIHRoYXQgZnJvbSB0aGF0IHRpbWUgb253YXJkIApoaXMgYXN0cmFsIGNvbnNjaW91c25lc3Mgd2lsbCBiZSBjb250aW51b3VzLCAKYW5kIGhpcyBtZW1vcnkgb2Ygd2hhdCBoYXBwZW5zIHdoaWxlIAp0aGUgcGh5c2ljYWwgYm9keSBpcyBhc2xlZXAgd2lsbCB0aGVyZWZvcmUgCmJlIHBlcmZlY3QuIEJ1dCBsb25nIGJlZm9yZSBzdWNoIGFuIAplZmZvcnQgb3IgYWNjaWRlbnQgaXMgcG9zc2libGUgZm9yIGhpbSAKdGhlIGZ1bGwgY29uc2Npb3VzbmVzcyBtdXN0IGhhdmUgYmVlbiB3b3JrLSAKaW5nIGluIHRoZSBhc3RyYWwgYm9keSwsIGV2ZW4gdGhvdWdoIAppbiB0aGUgcGh5c2ljYWwgbGlmZSBoZSBrbmV3IG5vdGhpbmcgb2YgaXQuIAoKSW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYSBtYW4gbXVzdCAKaGF2ZSBiZWVuIGZvciBhIGxvbmcgdGltZSB0aG9yb3VnaGx5IHByYWMtIAp0aXNlZCBpbiB0aGUgdXNlIG9mIGhpcyBtZW50YWwgYm9keSBhcyBhIAp2ZWhpY2xlIGJlZm9yZSBoZSBjYW4gaG9wZSB0byBicmVhayB0aGUgCmJhcnJpZXIgYmV0d2VlbiB0aGF0IGFuZCB0aGUgYXN0cmFsLCBzbyB0aGF0IApoZSBjYW4gaGF2ZSB0aGUgcGxlYXN1cmUgb2YgY29udGludW91cyAKcmVjb2xsZWN0aW9uLiBCeSBhbmFsb2d5IHRoaXMgbGVhZHMgdXMgdG8gc2VlIAp0aGF0IHRoZSBlZ28gbXVzdCBoYXZlIGJlZW4gZnVsbHkgY29uc2NpLSAKb3VzIGFuZCBhY3RpdmUgb24gaGlzIG93biBwbGFuZSBmb3IgYSBsb25nIAp0aW1lIGJlZm9yZSBhbnkga25vd2xlZGdlIG9mIHRoYXQgZXhpc3RlbmNlIApjYW4gY29tZSB0aHJvdWdoIHRvIHVzIGluIG91ciBwaHlzaWNhbCAKaGZlLiAKClRoZXJlIGFyZSBtYW55IGluIHdob20gdGhlIGVnbyAKaGFzIGFscmVhZHkgdG8gc29tZSBleHRlbnQgYXdha2VuZWQgZnJvbSAKdGhlIGNvbmRpdGlvbiBvZiBtZXJlIGJsaXNzIHdoaWNoIHdhcyBkZS0gCnNjcmliZWQgYWJvdmUsIGFuZCBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkgY29uLSAKc2Npb3VzIG9mIGhpcyBvd24gc3Vycm91bmRpbmdzLCBhbmQgdGhlcmUtIApmb3JlIG9mIG90aGVyIGVnb3MuIEZyb20gdGhhdCB0aW1lIG9uIGhlIAoKClRIRSBFR08gQU5EIFRIRSBQRVJTT05BTElUWSAzNzkgCgoKbGVhZHMgYSBoZmUgYW5kIGhhcyBpbnRlcmVzdHMgYW5kIGFjdGl2aXRpZXMgCm9uIGhpcyBvd24gcGxhbmU7IGJ1dCBldmVuIHRoZW4gd2UgbXVzdCAKcmVtZW1iZXIgdGhhdCBoZSAucHV0cyBkb3duIGludG8gdGhlIApwZXJzb25hbGl0eSBvbmx5IGEgdmVyeSBzbWFsbCBwYXJ0IG9mIApoaW1zZWxmLCBhbmQgdGhhdCB0aGF0IHBhcnQgY29uc3RhbnRseSAKYmVjb21lcyBlbnRhbmdsZWQgaW5fIGludGVyZXN0cyB3aGljaCwgCmJlY2F1c2UgdGhleSBhcmUgc28uIHBhcnRpYWwsIGFyZSBvZnRlbiAKYWxvbmcgJyBkaWZmZXJlbnQgbGluZXMgZnJvbSB0aGUgZ2VuZXJhbCAKYWN0aXZpdGllcyBvZiB0aGUgZWdvIGhpbXNlbGYsIHdobyBjb25zZS0gCnF1ZW50bHkgZG9lcyBub3QgcGF5IGFueSBwYXJ0aWN1bGFyIGF0dGVuLSAKdGlvbiB0byB0aGUgbG93ZXIgbGlmZSBvZiB0aGUgcGVyc29uYWxpdHksIAp1bmxlc3Mgc29tZXRoaW5nIHJhdGhlciB1bnVzdWFsIGhhcHBlbnMgdG8gCml0LiAKCldoZW4gdGhpcyBzdGFnZSBpcyByZWFjaGVkIGhlIHVzdWFsbHkgCmNvbWVzIHVuZGVyIHRoZSBpbmZsdWVuY2Ugb2YgYSBNYXN0ZXI7IGpuLSAKZGVlZCBvZnRlbiBoaXMgZmlyc3QgY2xlYXIgY29uc2Npb3VzbmVzcyBvZiAKYW55dGhpbmcgb3V0c2lkZSBoaW1zZWxmIGlzIGhpcyB0b3VjaCB3aXRoIAp0aGF0IE1hc3Rlci4gVGhlIHRyZW1lbmRvdXMgcG93ZXIgb2YgCnRoZSBNYXN0ZXLigJlzIGluZmx1ZW5jZSBtYWduZXRpc2VzIGhpbSwgCmRyYXdzIGhpcyB2aWJyYXRpb25zIGludG8gaGFybW9ueSB3aXRoIGl0cyAKb3duLCBhbmQgbXVsdGlwbGllcyBtYW55Zm9sZCB0aGUgcmF0ZSBvZiAKaGlzIGRldmVsb3BtZW50LiBJdCByYXlzIHVwb24gaGltIGhpa2UgCnN1bnNoaW5lIHVwb24gYSBmbG93ZXIsIGFuZCBoZSBldm9sdmVzIApyYXBpZGx5IHVuZGVyIGl0cyBpbmZsdWVuY2UuIFRoaXMgaXMgd2h5LCAKd2hpbGUgdGhlIGVhcmxpZXIgc3RhZ2VzIG9mIHByb2dyZXNzIGFyZSAKc28gc2xvdyBhcyB0byBiZSBhbG1vc3QgaW1wZXJjZXB0aWJsZSwgCndoZW4gdGhlIE1hc3RlciB0dXJucyBIaXMgYXR0ZW50aW9uIHVwb24gCnRoZSBtYW4sIGRldmVsb3BlcyBoaW0gYW5kIGFyb3VzZXMgaGlzIAoKCjM4MCAtQURZQVIgVEFMS1MgCgoKb3duIHdpbGwgdG8gdGFrZSBwYXJ0IGluIHRoZSB3b3JrLCB0aGUgCnNwZWVkIG9mIGhpcyBhZHZhbmNlbWVudCBpbmNyZWFzZXMgaW4gCmdlb21ldHJpY2FsIHByb2dyZXNzaW9uLiAKCk9mIHRoYXQgc3RyZWFtIG9mIGRpdmluZSBpbmZsdWVuY2UgcG91ci0gCmVkIHVwb24gdGhlIGVnbyBieSB0aGUgTWFzdGVyLCB0aGUgYW1vdW50IAp3aGljaCBjYW4gYmUgcGFzc2VkIG9uIHRvIHRoZSBwZXJzb25hbGl0eSAKZGVwZW5kcyB1cG9uIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gaXQgYW5kIAp0aGUgZWdvLCB3aGljaCBpcyB2ZXJ5IGRpZmZlcmVudCBpbiBkaWZmZXJlbnQgCmNhc2VzLiBUaGVyZSBpcyBhbG1vc3QgaW5maW5pdGUgdmFyaWV0eSBpbiAKaHVtYW4gbGlmZS4gVGhlIHNwaXJpdHVhbCBmb3JjZSByYXlzIHVwb24gCnRoZSBlZ28sIGFuZCBzb21lIGxpdHRsZSBvZiBpdCBjZXJ0YWlubHkgCmNvbWVzIHRocm91Z2ggbXRvIHRoZSBwZXJzb25hbGl0eSwgYmVjYXVzZSAKdGhvdWdoIHRoZSBlZ28gaGFzIHB1dCBmb3J0aCBhIHBhcnQgb2YgCmhpbXNlbGYgaGUgZG9lcyBub3QgY3V0IGhpbXNlbGYgb2ZmIGVudGlyZS0gCmx5IGZyb20gaXQsIG5vdHdpdGhzdGFuZG1nIHRoZSBmYWN0IAp0aGF0IGltIHRoZSBjYXNlIG9mIGFsbCBvcmRpbmFyeSBwZW9wbGUgCnRoZSBlZ28gYW5kIF8gdGhlIHBlcnNvbmFsaXR5IGFyZSB2ZXJ5IApkaWZmZXJlbnQgdGhpbmdzLiB8IAoKVGhlIGVnbyBpbiBvcmRpbmFyeSBtZW4gaGFzIF8gbm90IAptdWNoIGdyYXNwIG9mIHRoZSBwZXJzb25hbGl0eSwgbm9yIGEgCmNsZWFyIGNvbmNlcHRpb24gb2YgaGlzIHB1cnBvc2UgaW4gc2VuZC0gCmluZyBpdCBmb3J0aDsgYW5kLCBhZ2FpbiwgdGhlIHNtYWxsIHBpZWNlIAp3aGljaCBtZWV0cyB1cyBtIHRoZSBwZXJzb25hbGl0eSBncm93cyB0byAKaGF2ZSB3YXlzIGFuZCBvcGluaW9ucyBvZiBpdHMgb3duLiBJdCBpcyAKZGV2ZWxvcGluZyBieSB0aGUgZXhwZXJpZW5jZSB3aGljaCBpdCBnYWlucywgCmFuZCB0aGlzIGlzIHBhc3NlZCBvbiB0byB0aGUgZWdvOyBidXQgYWxvbmcgCndpdGggdGhpcyByZWFsIGRldmVsb3BtZW50IGl0IHVzdWFsbHkgZ2F0aGVycyAKYSBnb29kIGRlYWwgd2hpY2ggaXMgaGFyZGx5IHdvcnRoeSBvZiB0aGF0IAoKClRIRSBFR08gQU5EIFRIRSBQRVJTT05BTElUWSAzODEgCgoKbmFtZS4gSXQgYWNxdWlyZXMga25vd2xlZGdlLCBidXQgYWxzbyBwcmUtIApqdWRpY2VzLCB3aGljaCBhcmUgbm90IHJlYWxseSBrbm93bGVkZ2UgYXQgCmFsbC4gSXQgZG9lcyBub3QgYmVjb21lIHF1aXRlIGZyZWUgZnJvbSAKdGhlc2UgcHJlanVkaWNlc+KAlG5vdCBvbmx5IG9mIGtub3dsZWRnZSAob3IgCnJhdGhlciBpdHMgYWJzZW5jZSkgYnV0IG9mIGZlZWxpbmcgYW5kIGFjdGlvbiAKYXMgd2VsbOKAlHVudGlsIHRoZSBtYW4gXyByZWFjaGVzIGFkZXB0c2hpcC4gCkl0IGdyYWR1YWxseSBkaXNjb3ZlcnMgdGhlc2UgdGhpbmdzIHRvIGJlIHByZS0gCmp1ZGljZXMsIGFuZCBwcm9ncmVzc2VzIHRocm91Z2ggdGhlbTsgYnV0IAppdCBoYXMgYWx3YXlzIGEgZ3JlYXQgZGVhbCBvZiBsaW1pdGF0aW9uIGZyb20gCndoaWNoIHRoZSBlZ28gaXMgZW50aXJlbHkgZnJlZS4gCgpBcyB0byB0aGUgYW1vdW50IG9mIHRoZSBzcGlyaXR1YWwgZm9yY2UgCndoaWNoIGlzIHBhc3NlZCBvbiB0byB0aGUgcGVyc29uYWxpdHksIG9uZSAKY2FuIG9ubHkgZGVjaWRlIGluIGFfIHBhcnRpY3VsYXIgY2F5ZSAKYnkgdXNpbmcgY2xhaXJ2b3lhbmNlLiBCdXQgc29tZXRoaW5nIApvZiBpdCBtdXN0IGZsb3cgdGhyb3VnaCBhbHdheXMsIGJlY2F1c2UgCnRoZSBsb3dlciBpcyBhdHRhY2hlZCB0byB0aGUgaGlnaGVyLCBqdXN0IAphcyB0aGUgaGFuZCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSBieSAKdGhlIGFybS4gSXQgaXMgY2VydGFpbiB0aGF0IHRoZSBwZXJzb25hLSAKaHR5IG11c3QgZ2V0IHNvbWV0aGluZywgYnV0IGl0IGNhbiBiYXZlIApvbmx5IHdoYXQgaXQgaGFzIG1hZGUgaXRzZWxmIGFibGUgdG8gcmVjZWl2ZS4gCkl0IGlzIGFsc28gYSBxdWVzdGlvbiBvZiBxdWFsaXRpZXMuIOKAmFRoZSBNYXN0ZXIgCm9mdGVuIHBsYXlzIHVwb24gcXVhbGl0aWVzIGluIHRoZSBlZ28gd2hpY2ggCmFyZSBtdWNoIG9ic2N1cmVkIGluIHRoZSBwZXJzb25hbGl0eSwgYW5kIAppbiB0aGF0IGNhc2Ugb2YgY291cnNlIHZlcnkgbGl0dGxlIGNvbWVzIApkb3duLiBBcyBvbmx5IHRob3NlIGV4cGVyaWVuY2VzIG9mIHRoZSAKcGVyc29uYWxpdHkgY2FuIGJlIGhhbmRlZCBvbiB0byB0aGUgc3Bpcml0dWFsIApvciBwZXJtYW5lbnQgZWdvIHdoaWNoIGFyZSBjb21wYXRpYmxlIHdpdGggCmhpcyBuYXR1cmUgYW5kIGludGVyZXN0cywgc28gb25seSB0aG9zZSBpbS0gCgoKMzgyIEFEWUFSIFRBTEtTIAoKCnB1bHNlcyB0byB3aGljaCBpdCBpcyBhYmxlIHRvIHJlc3BvbmQgY2FuIGV4LSAKcHJlc3MgdGhlbXNlbHZlcyBpbiB0aGUgcGVyc29uYWxpdHkuIFJlbWVtLSAKYmVyLCB0aG91Z2gsIHRoYXQgdGhlIGZvcm1lciB0ZW5kcyB0byBleGNsdWRlIAp0aGUgYmFkIGFuZCB0aGUgbGF0dGVyIHRoZSBnb29k4oCUb3IgcmF0aGVyIAp3ZSBzaG91bGQgY2FsbCB0aGVtIHRoZSBtYXRlcmlhbCBhbmQgdGhlIApzcGlyaXR1YWwsIGZvciBub3RoaW5nIGlzIGJhZC4gCgpPbmUgbWF5IHNvbWV0aW1lcyBzZWUgYnkgY2xhaXJ2b3lhbmNlIAptYW55IG9mIHRoZXNlIGluZmx1ZW5jZXMgYXQgd29yay4gT24gYSAKY2VydGFpbiBkYXksIGZvciBleGFtcGxlLCB3ZSBtYXkgc2VlIGEgCmNoYXJhY3RlcmlzdGljIG9mIHRoZSBwZXJzb25hbGl0eSBtdWNoIGludGVuc2ktIApmaWVkLCB3aXRoIG5vIG91dHdhcmQgcmVhc29uLiBUaGUgY2F1c2UgaXMgb2YtIAp0ZW4gdG8gYmUgZm91bmQgaW4gd2hhdCBpcyB0YWtpbmcgcGxhY2UgYXQgc29tZSAKaGlnaGVyIGxldmVs4oCUdGhlIHN0aW11bGF0aW9uIG9mIHRoYXQgcXVhbGl0eSAKaW4gdGhlIGVnby4gU29tZXRpbWVzIGHigJkgbWFuIGZpbmRzIGhpbXNlbGYgCm92ZXJmbG93aW5nIHdpdGggYWZmZWN0aW9uIG9yIGRldm90aW9uLCBhbmQgCnF1aXRlIHVuYWJsZSBvbiB0aGUgcGh5c2ljYWwgcGxhbmUgdG8gdW5kZXItIApzdGFuZCB3aHkuIOKAmFRoZSBjYXVzZSBpcyB1c3VhbGx5LCBhZ2FpbiwgdGhlIApzdGltdWxhdGlvbiBvZiB0aGUgY2dvLCBvciBpdCBtYXkuIGJlIHRoYXQgCnRoZSBlZ28gaXMgdGFraW5nIHNvbWUgc3BlY2lhbCBpbnRlcmVzdCBpbiAKdGhlIHBlcnNvbmFsaXR5IGZvciB0aGUgdGltZSBiZWluZy4gCgpJbiBtZWRpdGF0aW9uIHdlIHNvbWV0aW1lcyBkcmF3IHN1Y2ggCmF0dGVudGlvbiBvbiB0aGUgcGFydCBvZiB0aGUgZWdvLCB0aG91Z2ggaXQgCmlzIHdlbGwgdG8ga2VlcCBpbiBtaW5kIHRoYXQgd2UgbXVzdCB0cnkgCnRvIHJlYWNoIHVwIHRvIGpvaW4gdGhhdCBoaWdoZXIgYWN0aXZpdHksIApyYXRoZXIgdGhhbiB0byBpbnRlcnJ1cHQgaXQgdG8gZHJhdyBkb3duIAppdHMgYXR0ZW50aW9uIHRvIHRoZSBsb3dlci4gVGhlIGhpZ2hlciBpbi0gCmZsdWVuY2UgaXMgY2VydGFpbmx5IGludml0ZWQgYnkgcmlnaHQgbWUtIApkaXRhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIGVmZmVjdGl2ZSwgZXZlbiAKCgpUSEUgRUdPIEFORCBUSEUgUEVSU09OQUxJVFkgMzgzIAoKCnRob3VnaCBvbiB0aGUgcGh5c2ljYWwgcGxhbmUgdGhpbmdzIG1heSAKc2VlbSB0byBiZSB2ZXJ5IGR1bGwgYW5kIHF1aXRlIHdpdGhvdXQgemVzdC4gClRoZSByZWFjaGluZyB1cHdhcmRzIG9mIHRoZSBlZ28gaGltc2VsZiAKb2Z0ZW4gbWVhbnMgaGlzIG5lZ2xlY3QgdG8gc2VuZCBlbmVyZ3kgCmRvd24gdG8gdGhlIHBlcnNvbmFsaXR5LCBhbmQgdGhpcywgb2YgCmNvdXJzZSwgbGVhdmVzIHRoZSBsYXR0ZXIgZmVlbGluZyByYXRoZXIgZHVsbCAKYW5kIGluIHRoZSBzaGFkZS4gVGhlIGV4dGVudCwgdGhlbiwgCnRvIHdoaWNoIHRoZSBwZXJzb25hbGl0eSBpcyBpbmZsdWVuY2VkIGJ5IAp0aGUgZWZmb3J0IG9mIHRoZSBNYXN0ZXIgZGVwZW5kcyB1cG9uIHR3byAKdGhpbmdzIHByaW5jaXBhbGx54oCUdGhlIHN0cmVuZ3RoIG9mIHRoZSBjb24tIApuZWN0aW9uIGF0IHRoZSB0aW1lIGJldHdlZW4gdGhlIGVnbyBhbmQgCnRoZSBwZXJzb25hbGl0eTsgYW5kIHRoZSBwYXJ0aWN1bGFyIHdvcmsgCndoaWNoIHRoZSBNYXN0ZXIgaXMgZG9pbmcgdXBvbiB0aGUgZWdvLCAKdGhhdCBpcywgdGhlIHBhcnRpY3VsYXIgcXVhbGl0aWVzIHVwb24gd2hpY2ggCkhlIGlzIHBsYXlpbmcuIAoKTWVkaXRhdGlvbiBhbmQgdGhlIHN0dWR5IG9mIHNwaXJpdHVhbCBzdWItIApqZWN0cyBpbiB0aGlzIGVhcnRobHkgbGlmZSBtYWtlIGEgdmVyeSBncmVhdCAKZGlmZmVyZW5jZSBpbiB0aGUgbGlmZSBvZiB0aGUgZWdvLiBUaGUgCm9yZGluYXJ5IHBlcnNvbiB3aG8gaGFzIG5vdCB0YWtlbiB1cCAKc3Bpcml0dWFsIG1hdHRlcnMgc2VyaW91c2x5IGhhcyBvbmx5IGEgdGhyZWFkIApvZiBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGhpZ2hlciBhbmRfIHRoZSAKbG93ZXIgc2VsZi4gVGhlIHBlcnNvbmFsaXR5IGluIGhpcyBjYXNlIApzZWVtcyB0byBoZSBhbGwsIGFuZCB0aGUgZWdvLCB0aG91Z2ggaGUgCnVuZG91YnRlZGx5IGV4aXN0cyBvbiBoaXMgb3duIHBsYW5lLCAxOCAKbm90IGF0IGFsbCBsaWtlbHkgdG8gYmUgZG9pbmcgYW55dGhpbmcgCmFjdGl2ZWx5IHRoZXJlLiBIZSBpcyB2ZXJ5IG11Y2ggbGlrZSBhIGNoaWNrLSAKZW4gd2hpY2ggaXMgZ3Jvd2luZyBpbnNpZGUgYW4gZWdnLiBCdXQgaW4gCnRoZSBjYXNlIG9mIHNvbWUgb2YuIHVzIHdobyBoYXZlIGJlZW4gCgoKMzg0IEFEWUFSIFRBTEtTIAoKCm1ha2luZyBlZmZvcnRzIGluIHRoZSByaWdodCBkaXJlY3Rpb24sIHdlIAptYXkgaG9wZSB0aGF0IHRoZSBlZ28gaXMgYmVjb21pbmcgcXVpdGUgCnZpdmlkbHkgY29uc2Npb3VzLiBIZSBoYXMgYnJva2VuIHRocm91Z2ggCmhpcyBzaGVsbCwgYW5kIGlzIGxpdmluZyBhIGxpZmUgb2YgZ3JlYXQgYWMtIAp0aXZpdHkgYW5kIHBvd2VyLiBBcyB3ZSBnbyBvbiwgd2Ugc2hhbGwgCmJlY29tZSBhYmxlIHRvIHVuaWZ5IG91ciBwZXJzb25hbCBjb25zY2lvdXMtIApuZXNzIHdpdGggdGhlIGxpZmUgb2YgdGhlIGVnbywgYXMgZmFyIGFzIHRoYXQgCmlzIHBvc3NpYmxlLCBhbmQgdGhlbiB3ZSBzaGFsbCBoYXZlIG9ubHkgCnRoZSBvbmUgY29uc2Npb3VzbmVzczsgZXZlbiBkb3duIGhlcmUgd2UgCnNoYWxsIGhhdmUgdGhlIGNvbnNjaW91c25lc3MgZGYgdGhlIGVnbywgd2hvIAp3aWxsIGtub3cgYWxsIHRoYXQgaXMgZ29pbmcgb24uIEJ1dCB3aXRoIAptYW55IHBlb3BsZSBhdCB0aGUgcHJlc2VudCBkYXkgdGhlcmUgaXMgCm9mdGVuIGNvbnNpZGVyYWJsZSBvcHBvc2l0aW9uIGJldHdlZW4gdGhlIApwZXJzb25hbGl0eSBhbmQgdGhlIGVnby4gCgpUaGVyZSBhcmUgb3RoZXIgdGhpbmdzIHRvIGJlIHRha2VuIGludG8gCmFjY291bnQuIEl0IGlzIGJ5IG5vIG1lYW5zIGFsd2F5cyBhY2N1cmF0ZSAKdG8ganVkZ2UgdGhlIGVnbyBieSBoaXMgbWFuaWZlc3RhdGlvbiBpbiAKdGhlIHBlcnNvbmFsaXR5LiBBbiBlZ28gb2YgaW50ZW5zZWx5IHByYWMtIAp0aWNhbCB0eXBlIG1heSBtYWtlIG11Y2ggbW9yZSBzaG93IG9uIAp0aGUgcGh5c2ljYWwgcGxhbmUgdGhhbiBhbm90aGVyIG9mIGZhciAKaGlnaGVyIGRldmVsb3BtZW50LCBpZiB0aGUgZW5lcmd5IG9mIHRoZSAKbGF0dGVyIGhhcHBlbnMgdG8gYmUgY29uY2VudHJhdGVkIGFsbW9zdCBleC0gCmNsdXNpdmVseSB1cG9uIHRoZSBjYXVzYWwgb3IgYnVkZGhpYyBsZXZlbHMuIApUaGVyZWZvcmUgcGVvcGxlIHdobyBzZWUgb25seSBvbiB0aGUgcGh5c2ljYWwgCnBsYW5lIGFyZSBmcmVxdWVudGx5IGVudGlyZWx5IHdyb25nIGluIHRoZWlyIAplc3RpbWF0aW9uIG9mIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBvdGhlcnMuIAoKSWYgeW91IGhhdmUgdG8gZGVhbCB3aXRoIGEgZmFpcmx5IGFkdmFuYy0gCmVkIGVnbywgeW91IHdpbGwgc29tZXRpbWVzIGZpbmQgaGltIHJhdGhlciAKCgpUSEUgRUdPIEFORCBUSEUgUEVSU09OQUxJVFkgMzg1IAoKCmluY29uc2lkZXJhdGUgb2YgaGlzIGJvZHkuIFlvdSBzZWUsIHdoYXQtIApldmVyIGlzIHB1dCBkb3duIGludG8gdGhlIHBlcnNvbmFsaXR5IGlzIApzbyBtdWNoIHRha2VuIGZyb20gZmltISBJIGhhdmUgYWdhaW4gCmFuZCBhZ2FpbiBzZWVuIGNhc2VzIGluIHdoaWNoIHRoZSBlZ28gd2FzIAp0byBzb21lIGV4dGVudCBpbXBhdGllbnQgYW5kIHdpdGhkcmV3IGludG8gCmhpbXNlbGYgc29tZXdoYXQ7IGJ1dCBvbiB0aGUgb3RoZXIgaGFuZCAKaW4gY2FzZXMgc3VjaCBhcyB0aGVzZSB0aGVyZSBpcyBhbHdheXMgYSAKZmxvdyBiZXR3ZWVuIHRoZSBlZ28gYW5kIHRoZSBwZXJzb25hbGl0eSwgCndoaWNoIGlzIG5vdCAucG9zc2libGUgd2l0aCB0aGUgb3JkaW5hcnkgCm1hbi4gSW4gdGhlIG9yZGluYXJ5IG1hbiB0aGUgcGFydCBpcywgYXMgCml0IHdlcmUsIHB1dCBkb3duIGFuZCBsZWZ0LCB0aG91Z2ggbm90IG9mIApjb3Vyc2UgcXVpdGUgY3V0IG9mZjsgYnV0IGF0IHRoaXMgbW9yZSAKYWR2YW5jZWQgc3RhZ2UgdGhlcmUgaXMgYSBjb25zdGFudCBjb20tIAptdW5pY2F0aW9uIGJldHdlZW4gdGhlIHR3byBhbG9uZyB0aGUgY2hhbi3igJQgCm5lbC4gVGhlcmVmb3JlLCB0aGUgZWdvIGNhbiB3aXRoZHJhdyBhIApncmVhdCBkZWFsIG9mIGhpbXNlbGYgd2hlbmV2ZXIgaGUgY2hvb3NlcywgCmFuZCBsZWF2ZSBhIHZlcnkgcG9vciByZXByZXNlbnRhdGlvbiBvZiB0aGUgCnJlYWwgbWFuIGJlaGluZC4gU28gdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIAp0aGUgbG93ZXIgYW5kIHRoZSBoaWdoZXIgc2VsZiB2YXJ5IG11Y2ggaW4gCmRpZmZlcmVudCBwZW9wbGUgYW5kIGF0IGRpZmZlcmVudCBzdGFnZXMgb2YgCmRldmVsb3BtZW50LiAKCkFzIHRvIHRoZSB3b3JrIG9mIHRoZSBlZ28sIGhlIG1heSAKYmUgbGVhcm5pbmcgdGhpbmdzIG9uIGhpcyBvd24gcGxhbmU7IG9yIGhlIAptYXkgYmUgaGVscGluZyBvdGhlciBlZ29z4oCUdGhlcmUgYXJlIAptYW55IGtpbmRzIG9mIHdvcmsgZm9yIHdoaWNoIGhlIG1heSBuZWVkIAphbiBhY2Nlc3Npb24gb2Ygc3RyZW5ndGguIEFuZCB0aGVuIGhlIG1heSAKZm9yZ2V0IGZvciBhIHRpbWUgdG8gcGF5IGhpc18gcGVyc29uYWxpdHkgCnByb3BlciBhdHRlbnRpb24sIGp1c3QgYXMgZXZlbiBhIGdvb2QgbWFuIAoKNDkgCgoKMzg2IC0gQURZQVIgVEFMS1MgCgoKbWF5IG9jY2FzaW9uYWxseSwgdW5kZXIgc29tZSBzcGVjaWFsIHByZXNzdXJlIApvZiBidXNpbmVzcywgZm9yZ2V0IGhpcyBob3JzZSBvciBoaXMgZG9nLiAiIFNvbWUtIAp0aW1lcyB3aGVuIHRoYXQgaGFwcGVucyB0aGUgcGVyc29uYWxpdHkgCnJlbWluZHMgaGltIG9mIGl0cyBleGlzdGVuY2UgYnkgYmx1bmRlcmluZyAKbXRvIHNvbWUgZm9vbGlzaG5lc3Mgd2hpY2ggY2F1c2VzIHNlcmlvdXMgCnN1ZmZlcm1nLiBZb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHNvbWUtIAp0aW1lcywgYWZ0ZXIgeW91IGhhdmUgY29tcGxldGVkIGEgc3BlY2lhbCAKcGllY2Ugb2Ygd29yayB0aGF0IGhhcyBuZWVkZWQgdGhlIGNvLSAKb3BlcmF0aW9uIG9mIHRoZSBlZ28gdG8gYS5sYXJnZSBleHRlbnTigJQgCmFzLCBmb3IgZXhhbXBsZSwgbGVjdHVyaW5nIHRvIGEgbGFyZ2UgYXVkaS0gCmVuY2XigJRoZSB0YWtlcyBhd2F5IHRoZSBlbmVyZ3kgYW5kIGxlYXZlcyAKdGhlIHBlcnNvbmFsaXR5IHdpdGggb25seSBlbm91Z2ggdG8gZmVlbCAKcmF0aGVyIGRpc3Bpcml0ZWQuIEZvciBhIHRpbWUgaGUgYWRtaXR0ZWQgCnRoYXQgdGhlcmUgd2FzIHNvbWUgaW1wb3J0YW5jZSBpbiB0aGUgCndvcmssIGFuZCB0aGVyZWZvcmUgcG91cmVkIGRvd24gYSBsaXR0bGUgCm1vcmUgb2YgaGltc2VsZiwgYnV0IGFmdGVyd2FyZHMgaGUgbGVhdmVzIAp0aGUgcG9vciBwZXJzb25hbGl0eSBmZWVsbWcgcmF0aGVyIGRlcHJlc3NlZC4gCgpPZiBjb3Vyc2UsIGRlcHJlc3Npb24gY29tZXMgbXVjaCBtb3JlIApvZnRlbiBmcm9tIG90aGVyIHJlYXNvbnMsIHN1Y2ggYXMgdGhlIHByZS0gCnNlbmNlIG9mIGFuIGFzdHJhbCBlbnRpdHkgaW4gYSBsb3ctc3Bpcml0ZWQgCmNvbmRpdGlvbiwgb3Igb2Ygc29tZSBub24taHVtYW4gYmVpbmdzLiAKQW5kIGpveSBhbHNvIGlzIG5vdCBhbHdheXMgZHVlIHRvIHRoZSBpbi0gCmZsdWVuY2Ugb2YgdGhlIGVnbywgZm9yIHRoZSBmYWN0IGlzIHRoYXQgdGhlIAptYW4gZG9lcyBub3QgdGhpbmsgbXVjaCBhYm91dCBoaXMgb3duIApmZWVsaW5ncyB3aGVuIGhlIGlzIGluIGFfIGZpdCBjb25kaXRpb24gdG8gCnJlY2VpdmUgYW4gaW5mbHV4IG9mIHBvd2VyLiBKb3kgbWF5IGJlIApwcm9kdWNlZCBieSB0aGUgcHJveGltaXR5IG9mIGhhcm1vbmlvdXMgCm5hdHVyZS1zcGlyaXRzLCBvciBpbiBhIHZhcmlldHkgb2Ygb3RoZXIgd2F5cy4gCgoKVEhFIEVHTyBBTkQgVEhFIFBFUlNPTkFMSVRZIDM4NyAKCgpUaGUgY2hhbm5lbCBiZXR3ZWVuIHRoZSBlZ28gYW5kIHBlcnNvbmFsLSAKaXR5IDFzIGJ5IG5vIG1lYW5zIGFsd2F5cyBvcGVuLiBTb21ldGltZXMgCml0IGFwcGVhcnMgdG8gYmUgYWxtb3N0IGNob2tlZCB1cOKAlGEgY29uLSAKZGl0aW9uIG9mIGFmZmFpcnMgd2hpY2ggaXMgcXVpdGUgYSBwb3NzaWJpbGl0eSAKaW4gdmlldyBvZiBpdHMgbmFycm93bmVzcyBpbiBtb3N0IGNhc2VzLiAKaGVuIHRoZSBmb3JjZSBtYXkgYnJlYWsgdGhyb3VnaCBhZ2FpbiAKb24gc29tZSBvY2Nhc2lvbiwgc3VjaCBhcyB0aGF0IG9mIGEgY29uLSAKdmVyc2lvbi4gQnV0IGZvciBtYW55OiBvZiB1cyB0aGVyZSBpcyBhIApjb25zdGFudCBmbG93IGluIHNvbWUgbWVhc3VyZS4gTWVkaXRhdGlvbiwgCmNvbnNjaWVudGlvdXNseSDCq2RvbmUsIG9wZW5zIHRoZSBjaGFubmVsIGFuZCAKa2VlcHMgaXQgb3Blbi4gQWx3YXlzIHJlbWVtYmVyLCB0aG91Z2gsIAp0aGF0IGl0IGlzIGJldHRlciB0byB0cnkgdG8gZ28gdXAgdG8gdGhlIAplZ28gdGhhbiB0byBicmluZyBpdCBkb3duIHRvIHRoZSBwZXJzb25hbC0gCml0eS4gCgpFdmVyeSBlZ28gaGFzIGFfIGNlcnRhaW4ga25vd2xlZGdlIG9mIApoaXMgb3duLiBIZSBvYnRhaW5zIGEgZ2xpbXBzZSwgYmV0d2VlbiAKbGl2ZXMsIG9mIGhpcyBwYXN0IGFuZCBmdXR1cmU7IGluIHRoZSB1bi0gCmRldmVsb3BlZCBtYW4gdGhpcyBhd2FrZW5zIHRoZSBlZ28gZm9yIGEgCm1vbWVudCwgYWZ0ZXIgd2hpY2ggaGUgZmFsbHMgYXNsZWVwIGFnYWluLiAKRHVyaW5nIHBoeXNpY2FsIGxpdGUgdGhlIG9yZGltYXJ5IGVnbyBpcyB0byAKc29tZSBleHRlbnQgY2FwYWJsZSBvZiBicm9vZGluZyB3YXRjaGZ1bG5lc3MgCmFuZCBhIGxpdHRsZSBlZmZvcnQsIGJ1dCBpcyBzdGlsbCBtIGEgc2xlZXB5IApjb25kaXRpb24uIFdpdGggYSBkZXZlbG9wZWQgbWF1IHRoZSBlZ28gCmlnIGZ1bGx5IGF3YWtlLiDigJhUJ2hlIGVnbyBpbiBjb3Vyc2Ugb2YgdGltZSAKZGlzY292ZXJzIHRoYXQgdGhlcmUgYXJlIGEgdm9vZCBtYW55IHRoaW5ncyAKd2hpY2ggaGUgY2FuIGRvLCBhbmQgd2hlbiB0aGlzIGhhcHBlbnMgCmhlIG1heSByaXNlIGludG8gYSBjb25kaXRpb24gaW4gd2hpY2ggaGUgCmhhcyBhIGRlZmluaXRlIGxpZmUgb24gaGlzIG93bi4gcGxhbmUsIHRob3VnaCAKCgozODggQURZQVIgVEFMS1MgCgoKaW4uIG1hbnkgY2FzZXMgaXQgMXMgZXZlbiB0aGVuIGJ1dCBkcmVhbXkuIApJdCBpcyB0aGUgZWdv4oCZcyBwdXJwb3NlIHRvIGxlYXJuIHRvIGJlIApmdWxseSBhY3RpdmUgb24gYWxsIHBsYW5lcywgZXZlbiB0aGUgcGh5c2ljYWwuIAoKU3VwcG9zZSB5b3UgaGF2ZSBhbiBlZ28gd2hvc2UgcHJpbmNpLSAKcGFsIG1ldGhvZCBvZiBtYW5pZmVzdGluZyBoaW1zZWxmIGlzLiBieTogCmFmZmVjdGlvbi4g4oCYVGhhdCBxdWFsaXR5IGlzIHdoYXQgaGUgd2FudHMgCmV4aGliaXRlZCBieSBoaXMgcGVyc29uYWxpdHksIGFuZCBpZiB5b3UgCmRvd24gaGVyZSB0cnkgdG8gZmVlbCBzdHJvbmcgYWZmZWN0aW9uIGFuZCAKd2FrZSBhIHNwZWNpYWxpdHkgb2YgdGhhdCwgdGhlIGVnbyB3aWxsIApwcm9tcHRseSB0aHJvdyBtb3JlIG9mIGhpbXNlbGYgZG93biBpbi0gCnRvIHRoZSBwZXJzb25hbGl0eSwgYmVjYXVzZSBoZSBmaW5kcyBpbSBpdCAKZXhhY3RseSB3aGF0IGhlIGRlc2lyZXMuIEJlIGNhcmVmdWwgdG8gcHJvLSAKdmlkZSB3aGF0IGhlIG5lZWRzLCBhbmQgaGUgd2lsbCBxdWlja2x5IAp0YWtlIGFkdmFudGFnZSBvZiBpdC4gRUhnb3Mgb24gdGhlaXIgb3duIApwbGFuZSBjYW4gaGVscCBvdGhlciBlZ29zLCB3aGVuIHRoZXkgCmFyZSBzdXR0aWNpZW50bHkgZGV2ZWxvcGVkIHRvIGRvIHNvLiBUaGUgCmV5byBvZiB0aGUgb3JkaW5hcnkgcGVyc29uIGhhcyByYXRoZXIgYSAKdmV2ZXRhYmxlIGNvbnNjaW91c25lc3Mgb3IgbGlmZSwgYW5kIHNlZW1zIAp0byBiZSBvbmx5IGp1c3QgYXdhcmUgb2Ygb3RoZXIgZWdvcy4gVGhlIApwZXJzb25hbGl0eSB3aWxsIG5vdCBrbm93IHdoYXQgdGhlIGVnbyAKZG9lcywgdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIHVuaWZpZWQuIFRoZSAKZWdvIG1heSBrbm93IHRoZSBNYXN0ZXIgd2hpbGUgdGhlIHBlci0gCnNvbmFodHkgZG9lcyBub3QuIFRoZSBzdHVkeSBvZiBpbm5lciAKdGhpbmdzLCBhbmQgbGl2aW5nIHRoZSBsaWZlLCB3YWtlcyB1cCB0aGUgCmVnby4gUHVyZWx5IHVuc2VsZmlzaCBkZXZvdGlvbiBiZWxvbmdzIHRvIAp0aGUgaGlnaGVyIHBsYW5lcyBhbmQgY29uY2VybnMgaGltLiAKClQgZG8gbm90IHRoaW5rIHRoZSBleHBlcmllbmNlcyBvZiB0aGUgCnBlcnNvbmFsaXR5LiBjYW4gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIGVnbywgCgoKVEhFIEVHTyBBTkQgVEhFIFBFUlNPTkFMSVRZIDM4OSAKCgrigJhidXQgdGhlIGVzc2VuY2Ugb2YgdGhlbSBtYXkuIEhlIApjYXJlcyBsaXR0bGUgZm9yIHRoZSBkZXRhaWxzLCBidXQgaGUgd2FudHMgCnRoZSBlc3NlbmNlIG9mIGl0LiBBbnkgb2YgdGhvc2UgdGhvdWdodHMgCnRoYXQgd2UgY29uc2lkZXIgZXZpbCBhcmUgaW1wb3NzaWJsZSAKZm9yIHRoZS4gZWdvLiBGb3IgcHJlY2lzZSBkZWZpbml0aW9uIGhlIG11c3QgCmNvbWUgZG93biBpbnRvIHRoZSBwaHlzaWNhbCBib2R5LiBIZSAKZGV2b3RlcyBoaW1zZWxmIG1vcmUgZXNwZWNpYWxseSBkdXJtZyB0aGUgCmhlYXZlbi1saWZlIHRvIHRoZSBhc3NpbWlsYXRpb24gb2YgdGhlIGV4LSAKcGVyaWVuY2VzIG9mIHRoZSBwZXJzb25hbGl0eSwgYnV0IGhlIGlzIGRvLSAKaW5nIGl0IGFsbCB0aGUgdGltZS4gV2hlbiB5b3UgdGFrZSB1cCAKdGhlIHN0dWR5IG9mIFRoZW9zb3BoeSwgYW5kIF8gbGl2ZSB0aGUgCmxpdGUsIHlvdSBiZWdpbiB0byBjYWxsIHRoZSBhdHRlbnRpb24gb2YgCnRoZSBlZ28gYnkgc2VuZGluZyB1cCB2aWJyYXRpb25zIHRvIAp3aGljaCBoZSBjYXUgcmVzcG9uZC4g4oCYVGhlIG9yZGluYXJ5IG1hbiAKaGFzIGluIGhpcyAtbGlmZSBsaXR0bGUgdGhhdCBhcHBlYWxzIHRvIHRoZSAKZWdPLiAKCkhpZ2ggdW5zZWxmaXNoIGFmZmVjdGlvbiDigJxhbmQgZGV2b3Rpb24gYmUtIApsb25nIHRvIHRoZSBoaWdoZXN0IGFzdHJhbCBzdWItcGxhbmUsIGFuZCB0aGVzZSAKcmVmbGVjdCB0aGVtc2VsdmVzIGluIHRoZSBjb3JyZXNwb25kaW5nIG1hdC0gCnRlciBvZiB0aGUgbWVudGFsIHBsYW5lLCBzbyB0aGF0IHRoZXkgdG91Y2ggCnRoZSBjYXVzYWwsIG5vdCB0aGUgbG93ZXIgbWVudGFsLiDigJhodXMgCm9ubHkgdW5zZWxmaXNoIHRob3VnaHRzIGFmZmVjdCB0aGUgZWdvLiBBbGwgdGhlIApsb3dlciB0aG91Z2h0cyBhZmZlY3QgdGhlIHBlcm1hbmVudCBhdG9tcywgYnV0IApub3QgdGhlIGVnbzsgYW5kIGNvcnJlc3BvbmRpbmcgdG8gdGhlbSB5b3UgCndvdWxkIGZpbmQgZ2FwcyBpbiB0aGUgY2F1c2FsIGJvZHksIG5vdCBiYWQgCmNvbG91cnMuIFNlbGZpc2huZXNzIGJlbG93IHNob3dzIGluIGl0IGFzIAphYnNlbmNlIG9mIGFmZmVjdGlvbiBvciBzeW1wYXRoeSwgYW5kIHdoZW4gdGhlIApnb29kIHF1YWxpdHkgZGV2ZWxvcGVzIHRoZSBnYXAgd2lsbCBiZSBmaWxsZWQgCgoKMzkwIHwgQURZQVIgVEFMS1MgCgoKdXAuIEluIHRoZSBjYXVzYWwgYm9keSB5b3UgY2FuIF8gc2VlIAp3aGV0aGVyIGEgbWFuIGNhbiBwb3NzaWJseSBmYWlsIGluIHRoaXMgCm9yIHRoYXQgcXVhbGl0eS4gVHJ5IHRvIGRldmVsb3BlIHRoZSBxdWFsaS0gCnRpZXMgdGhlIGVnbyB3YW50cywgYW5kIGhlIHdpbGwgY29tZSBkb3duIAp0byBoZWxwLiAKCkFzIGlzIHNhaWQgaW4gTGFpZ2h0IG9uIHRoZSBQYXRoLCB3YXRjaCAKZm9yIHRoZSBlZ28sIGFuZCBsZXQgaGltIGZpZ2h0IHRocm91Z2ggeW91LCAKYW5kIHlldCBhdCB0aGUgc2FtZSB0aW1lIG5ldmVyIGZvcmdldCAKdGhhdCB5b3UgYXJlIHRoZSBlZ28uIFRoZXJlZm9yZSBpZGVudGlmeSAKeW91cnNlbGYgd2l0aCBoaW0gYW5kIG1ha2UgdGhlIGxvd2VyIApnaXZlIHdheSB0byB5b3UgdGhlIGhpZ2hlci4gWWV0IGRvIG5vdCAKYmUgdG9vIGdyZWF0bHkgZGlzaGVhcnRlbmVkIGlmIHlvdSBzaG91bGQgCmZhbGwgZXZlbiBtYW55IHRpbWVzLCBmb3IgZXZlbiBmYWlsdXJlIGlzIHRvIAphIGNlcnRhaW4gZXh0ZW50IGEgc3VjY2Vzcywgc2luY2Ugd2UgbGVhcm4gCmJ5IGl0IGFuZCBzbyBhcmUgd2lzZXIgdG8gbWVldCB0aGUgbmV4dCAKcHJvYmxlbS4gV2UgY2Fubm90IGFsd2F5cyBzdWNjZWVkIG5vdyAKYXQgZXZlcnkgcG9pbnQsIHRob3VnaCB3ZSBzdXJlbHkgc2hhbGwgZG8gCnNvIHVsdGltYXRlbHkuIEJ1dCBuZXZlciBmb3JnZXQgdGhhdCBpdCBpcyAKbm90IGV4cGVjdGVkIG9mIHVzIHRoYXQgd2Ugc2hhbGwgYWx3YXlzIApzdWVjZWVkLCBidXQgb25seSB0aGF0IHdlIHNoYWxsIGRvIG91ciBiZXN0LiAKCgpDT1VOVEVSUEFSVFMgCgoK4oCcV2hlbiB0aGUgZWdvIGRlc2NlbmRzIGludHUgaW5jYXJuYXRpb24sIApoZSBkcmF3cyByb3VuZCBoaW1zZWxmIGEgbWFzcyBvZiBhc3RyYWwgCm1hdHRlciwgbm90IHlldCBmb3JtZWQgaW50byBhIGRlZmluaXRlIGFzdHJhbCAKCgpDT1VOVEVSUEFSVFMgMzkxIAoKCmJvZHk7IHRoaXMgdGFrZXMsIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhlIApzaGFwZSBvZiB0aGF0IG92b2lkIHdoaWNoIGlzIHRoZSBuZWFyZXN0IApleHByZXNzaW9uIHRoYXQgd2UgY2FuIHJlYWxpc2Ugb2YgdGhlIHRydWUgCnNoYXBlIG9mIHRoZSBjYXVzYWwgYm9keS4gQnV0IHdoZW4gdGhlIApmdXJ0aGVyIHN0ZXAgZG93bndhcmQgYW5kIG91dHdhcmQgaW50byAKcGh5c2ljYWwgaW5jYXJuYXRpb24gaXMgdGFrZW4sIGFuZCBhIGxpdHRsZSAKcGh5c2ljYWwgYm9keSBpcyBmb3JtZWQgaW4gdGhlIG1pZHN0IG9mIAp0aGF0IGFzdHJhbCBtYXR0ZXIsIGl0IGltbWVkaWF0ZWx5IGJlZ2lucyAKdG8gZXhlcnQgYSB2aW9sZW50IGF0dHJhY3Rpb24gb3ZlciBpdCwgc28gdGhhdCAKdGhlIGdyZWF0IG1ham9yaXR5IG9mIHRoZSBhc3RyYWwgbWF0dGVyIAood2hpY2ggcHJldmlvdXNseSBtYXkgYmUgdGhvdWdodCBvZiBhcyAKZmFpcmx5IGV2ZW5seSDigJhkaXN0cmlidXRlZCBvdmVyIHRoZSBsYXJnZSAKb3ZhbCkgbm93IGJlY29tZXMgY29uY2VudHJhdGVkIGludG8gdGhlIApwZXJpcGhlcnkgb2YgdGhhdCBwaHlzaWNhbCBib2R5LiAKCkFzIHRoZSBwaHlzaWNhbCBib2R5IGdyb3dzLCB0aGUgYXN0cmFsIAptYXR0ZXIgZm9sbG93cyBpdHMgZXZlcnkgY2hhbmdlLCBhbmQgdGh1cyAKd2UgZmluZCBtYW4gcHJlc2VudGluZyB0aGUgc3BlY3RhY2xlIG9mIGFuIAphc3RyYWwgYm9keSwgbmluZXR5LW5pbmUgcGVyIGNlbnQgb2Ygd2hpY2ggaXMgCmNvbXByZXNzZWQgd2l0aGluIHRoZSBwZXJpcGhlcnkgb2YgaGlzIApwaHlzaWNhbCBib2R5LCBvbmx5IGFib3V0IHRoZSByZW1haW1pbmcgb25lIApwZXIgY2VudCBmaWxpbmcgdGhlIHJlc3Qgb2YgdGhlIG92b2lkIGZvcm0uIApJbiB0aGUgcGxhdGVzIGluIE1hdSwgVmFzaWJsZSBhbmQgVG52aXNpYmxlIAp3ZS4gaGF2ZSBza2V0Y2hlZCBpbiB0aGUgb3V0aG5lIG9mIHRoZSAKcGh5c2ljYWwgYm9keSBtZXJlbHkgaW5fIHBlbmVpbCwgc28gdGhhdCAKaXQgc2hvd3MgYnV0IHNsaWdodGx5LCBiZWNhdXNlIG15IGVzcGVjaWFsIApkZXNpcmUgaW4gdGhhdCBib29rIHdhcyB0byBlbXBoYXNpc2UgdGhlIApjb2xvdXJzIG9mIHRoZSBvdm9pZCwgYW5hIHRoZSB3YXkgaW4gCndoaWNoIHRoZXkgaWxsdXN0cmF0ZSB0aGUgZGV2ZWxvcG1lbnQgb2YgCgoKMzkyIEFEWUFSIFRBTEtTIAoKCm1haW4gYnkgdGhlIHRyYW5zZmVyIG9mIHZpYnJhdGlvbnMgZnJvbSB0aGUuIApsb3dlciBib2RpZXMgdG8gdGhlIGhpZ2hlcjsgYnV0IGluXyByZWFsaXR5IAp0aGF0IGFzdHJhbCBjb3VudGVycGFydCBvZiB0aGUgcGh5c2ljYWwgYm9keSAKaXMgdmVyeSBzb2xpZCBhbmQgZGVmaW5pdGUsIGFuZCBxdWl0ZSBjbGVhcmx5IApkaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgc3Vycm91bmRpbmcuIG92b2lkLiAKTm90ZSwgdGhlcmV0b3JlLCB0aGF0IHRoZSBhc3RyYWwgbWF0dGVyIAp0YWtlcyB0aGUgZXhhY3QgZm9ybSBvZiB0aGUgcGh5c2ljYWwgbWF0dGVyIAptw6lyZWx5IGJlY2F1c2Ugb2YgdGhlIGF0dHJhY3Rpb24gd2hpY2ggdGhlIApsYXR0ZXIgaGFzIGZvciB0aGUgZm9ybWVyLiAuQnV0IHdlIG11c3QgCmZ1cnRoZXIgcmVhbGlzZSB0aGF0IGFsdGhvdWdo4oCZIHdlIG1heSBzcGVhayAKb2YgdGhlIGxvd2VzdCBzdWItcGxhbmUgb2YgdGhlIGFzdHJhbCBhcyAKY29ycmVzcG9uZGluZyB0byBzb2xpZCBwaHlzaWNhbCBtYXR0ZXIsIGl0IGlzIAp5ZXQgdmVyeSBkaWZmZXJlbnQgaW4gdGV4dHVyZSwgZm9yIGFsbCBhc3RyYWwgCm1hdHRlciBiZWFycyB0byBpdHMgY29ycmVzcG9uZGluZyBwaHlzaWNhbCAKbWF0dGVyIHNvbWV0aGluZyB0aGUgc2FtZSBzb3J0IG9mIHJlbGF0aW9uIAp0aGF0IHRoZSBsaXF1aWQgYmVhcnMgdG8gdGhlIHNvbGlkLiBUaGVyZWZvcmUgCnRoZSBwYXJ0aWNsZXMgb2YgdGhlIGFzdHJhbCBib2R5LCB3aGV0aGVyIAppbiB0aGUgZmluZXN0IG9yIGNvYXJzZXN0LiBwYXJ0cyBvZiBpdCwgYXJlIGNvbi0gCnN0YW50bHkgaW4gbW90aW9uIGFtb25nIHRoZW1zZWx2ZXMsIC4ganVzdCAKYXMgYXJlIHRoZSBwYXJ0aWNsZXMgb2YgZmxvd2luZyB3YXRlcjsgYW5kIAppdCB3aWxsIGNvbnNlcXVlbnRseSBiZSBzZWVuIHRoYXQgaXQgaXMgcXVpdGUgCmltcG9zc2libGUgZm9yIHRoZSBhc3RyYWwgYm9keSB0byBwb3NzZXNzIApzcGVjaWFsaXNlZCBvcmdhbnMgaW4gdGhlIHNhbWUgc2Vuc2UgYXMgCmRvZXMgdGhlIHBoeXNpY2FsIGJvZHkuIArigJxObyBkb3VidCB0aGVyZSBpcyBhbiBleGFjdCBjb3VudGVycGFydCBpbiAKYXN0cmFsIG1hdHRlciBvZiB0aGUgcm9kcyBhbmQgY29uZXMgd2hpY2ggCm1ha2UgdXAgdGhlIHJldGluYSBvZiB0aGUgcGh5c2ljYWwuIGV5ZTsgYnV0IAp0aGUgcGFydGljbGVzIHdoaWNoIC1hdCBvbmUgbW9tZW50IGFyZSAKCgpDT1VOVEVSUEFSVFMgMzkzIAoKCm9jY3VweWluZyB0aGF0IHBhcnRpY3VsYXIgcG9zaXRpb27igJkgaW4gLiBhbiAKX2FzdHJhbCBib2R5IG1heSwgYSBzZWNvbmQgb3IgdHdvIGxhdGVyLCBiZSAKbW92aW5nIHRocm91Z2ggdGhlIGhhbmQgb3IgdGhlIGZvb3QuIE9uZSAKZG9lcyBub3QsIHRoZXJlZm9yZSwgc2VlIHVwb24gdGhlIGFzdHJhbCBwbGFuZSAKYnkgbWVhbnMgb2YgdGhlIGFzdHJhbCBjb3VudGVycGFydCBvZiB0aGUgCnBoeXNpY2FsIGV5ZXMsIG5vciBkb2VzIG9uZSBoZWFyIHdpdGggdGhlIAphc3RyYWwgY291bnRlcnBhcnQgb2YgdGhlIHBoeXNpY2FsIGVhcnM7IGluZGVlZCwgCml0IDFzIHBlcmhhcHMgbm90IGV4YWN0bHkgY29ycmVjdCB0byBhcHBseSAKdGhlIHRlcm1zIOKAmHNlZWluZ+KAmSBhbmQg4oCYaGVhcmluZ+KAmSB0byBhc3RyYWwgCm1ldGhvZHMgb2YgY29nbmlzYW5jZSwgc2luY2UgdGhlc2UgdGVybXMgCmFyZSBjb21tb25seSBoZWxkIHRvIGltcGx5IHNwZWNpYWxpc2VkIHNlbnNlLSAKb3JnYW5zLCB3aGVyZWFzIHRoZSBmYWN0IGlzIHRoYXQgZXZlcnkgcGFydGktIApjbGUgaW4gdGhlIGFzdHJhbCBib2R5IGlzIGNhcGFibGUgb2YgcmVjZWl2LSAKaW5nIGFuZCB0cmFuc21pdHRpbmcgdmlicmF0aW9ucyBmcm9tIG9uZSAKb2YgaXRzIG93biB0eXBlLCBidXQgaXRzIG93biB0eXBlIG9ubHkuIApUaHVzIHdoZW4gb25lIG9idGFpbnMgYSBnbGltcHNlIG9mIGFzdHJhbCAKY29uc2Npb3VzbmVzcywgb25lIGlzIHN1cnByaXNlZCB0byBmaW5kIG9uZS0gCnNlbGYgYWJsZSB0byBzZWUgb24gYWxsIHNpZGVzIHNpbXVsdGFuZW91c2x5LCAKaW5zdGVhZCBvZiBvbmx5IGluIGZyb250IGFzIG9uZSBkb2VzIG9uIHRoZSAKcGh5c2ljYWwgcGxhbmUuIOKAmFRoZSBleGFjdCBjb3JyZXNwb25kZW5jZSAKb2YgdGhlIGFzdHJhbCBib2R5IHRvIHRoZSBwaHlzaWNhbCB0aGVyZWZvcmUgCmlzIG1lcmVseSBhIG1hdHRlciBvZiBleHRlcm5hbCBmb3JtLCBhbmQgCmRvZXMgbm90IGF0IGFsbCBpbnZvbHZlIGFueSBzaW1pbGFyaXR5IG9mIApmdW5jdGlvbiBpbiB0aGUgdmFyaW91cyBvcmdhbnMuIAoKQnV0IHRoZSBhdHRyYWN0aW9uIGNvbnRpbnVlZCBhbGwgdGhyb3VnaCBoZmUgCnNldHMgdXAgYSBraW5kIG9mIGhhYml0IG9yIG1vbWVudHVtIGluIHRoZSAKYXN0cmFsIG1hdHRlciwgd2hpY2ggY2F1c2VzIGl0IHRvIHJldGFpbiB0aGUgCgoKc2FtZSBmb3JtIGV2ZW4gd2hpbGUgaXQgaXMgd2l0aGRyYXduIHRlbXBvLSAKNTAgCgoKQk9BIEFEWUFSIFRBTEtTIAoKCuKAmGFyaWx5IGZyb20gdGhlIGF0dHJhY3Rpb24gb2YgdGhlIHBoeXNpY2FsIGJvZHkgCmF0IG5pZ2h0IGFuZCBwZXJtYW5lbnRseSBhZnRlciBkZWF0aDsgc28gCnRoYXQgZXZlbiB0aHJvdWdoIHRoZSBsb25nIGFzdHJhbCBsaXRlIHRoZSAKbGluZWFtZW50cyBvZiB0aGUgcGh5c2ljYWwgYm9keSB3aGljaCB3YXMgCnB1dCBhc2lkZSBhdCBkZWF0aCB3aWxsIHN0aWxsIGJlIHByZXNlcnZlZCAKCgphbG1vc3Q6IHVuY2hhbmdlZC4gQWxtb3N04oCUYmVjYXVzZSB3ZSBtdXN0LiAKCgpub3QgZm9yZ2V0IHRoYXQgdGhvdWdodCBoYXMgYSBwb3dlci0gCmZ1bCBpbmZsbmVuY2UgdXBvbiBhc3RyYWwgbWF0dGVyIGFuZCBjYW4gCnJlYWRpbHkgbW91bGQgaXQsIHNvIHRoYXQgYSBtYW4gd2hvIF8gaGFiaXQtIAp1YWxseSB0aGlua3Mgb2YgaGltc2VsZiBhZnRlciBkZWF0aCBhcyAKdm91bmdlciB0aGFuIGhlIGFjdHVhbGx5IHdhcyBhdCB0aGUgdGltZSAKb2YgdGhhdCBkZWF0aCB3aWxsIGdyYWR1YWxseSBjb21lIHRvIApwcmVzZW50IGEgc29tZXdoYXQgeW91bmdlciBhcHBlYXJhbmNlLiAKCkEgcXVlc3Rpb25lciBhc2tzLCDigJxJZiB0aGUgYXJtIG9mIGEgbWFuLCAKdGhlIGJyYW5jaCBvZiBhIHRyZWUsIG9yIHRoZSBsZWcgb2YgYSBjaGFpciAKd2VyZSBjdXQgb2ZmLCB3b3VsZCBtIGVhY2ggY2FzZSB0aGUgYXN0cmFsIApjb3VudGVycGFydCBhbHNvIGJlIHJlbW92ZWQsIGFuZCBjYW4gd2UsIApieSBicmVha2luZyBhbiBhc3RyYWwgY291bnRlcnBhcnQsIHByb2R1Y2UgCmEgZnJhY3R1cmUgaW0gYSBwaHlzaWNhbCBvYmplY3Q/IFRoYXQgaXMgCnRvIHNheSwgMWYgd2l0aCB0aGUgaGFuZCBvZiBteSBhc3RyYWwgYm9keSAKW1QgYnJlYWsgdGhlIGFzdHJhbCBjb3VudGVycGFydCBvZiBhIGNoYWlyLCAKd2lsbCB0aGUgcGh5c2ljYWwgY2hhaXIgYWxzbyBiZSBicm9rZW4gP+KAneKAmSAKClRoZSB0aHJlZSBjYXNlcyBnaXZlbiBhcmUgbm90IHF1aXRlIGFuYS0gCmxvZ291cy4gQm90aCB0aGUgdHJlZSBhbmQgdGhlIG1hbiBoYXZlIHRoZSAKbGlmZSB3aXRobiB0aGVtIHdoaWNoIG1ha2VzIHRoZSBhc3RyYWwgCmJvZHkgaW0gY2FjaCBjYXNlIGEgY29oZXJlbnQgd2hvbGUuIEl0IGlzIApzdHJvbmdseSBhdHRyYWN0ZWQgYnkgdGhlIHBhcnRpY2xlcyBvZiB0aGUgCnBoeXNpY2FsIGJvZHksIGFuZCB0aGVyZWZvcmUgYWRhcHRzIGl0c2VsZiB0byAKCgpDT1VOVEVSUEFSVFMgMzA1IAoKCml0cyBzaGFwZSwgYnV0IGlmIHBhcnQgb2YgdGhhdCBwaHlzaWNhbCBib2R5IApiZSByZW1vdmVkLCB0aGUgY29oZXJlbmNlIG9mIHRoZSBsaXZpbmcgCmFzdHJhbCBtYXR0ZXIgaXMgc3Ryb25nZXIgdGhhbiB0aGUgYXR0cmFjdC0gCmlvbiB0b3dhcmRzIHRoYXQgc2V2ZXJlZCBwb3J0aW9uIG9mIHRoZSAKcGh5c2ljYWwuIENvbnNlcXVlbnRseSB0aGUgYXN0cmFsIGNvdW50ZXItIApwYXJ0IG9mIHRoZSBhcm0gb3IgYnJhbmNoIHdpbGwgbm90IGJlIApjYXJyaWVkIGF3YXkgd2l0aCB0aGUgc2V2ZXJlZCBwaHlzaWNhbCBmcmFnLSAKbWVudC4gU2luY2UgaXQgaGFzIGFjcXVpcmVkIHRoZSBoYWJpdCBvZiAKa2VlcGluZyB0aGF0IC5wYXJ0aWN1bGFyIGZvcm0sIGl0IHdpbGwgY29uLSAKdGludWUgZm9yIGEgc2hvcnQgdGltZSB0byByZXRhaW4gdGhlIG9yaS0gCnZpbmFsIHNoYXBlLCBidXQgd2lsbCBzb29uIHdpdGhkcmF3IHdpdGhpbiAKdGhlIGxpbWl0cyBvZiB0aGUgbWFpbWVkIGZvcm0uIAoKSW4gdGhlIGNhc2Ugb2YgYW4gaW5hbmltYXRlIGJvZHksIHN1Y2ggCnVzIGEgY2hhIG9yIGEgYmFzaSwgdGhlcmUgd291bGQgbm90IGJlIAp0aGUgc2FtZSBraW5kIG9mIGluZGl2aWR1YWwgbGlmZSB0byBtYWluLSAKdGFpbiBjb2hlc2lvbi4gQ29uc2VxdWVudGx5IHdoZW4gdGhlIHBoeXMtIAppY2FsIG9iamVjdCB3YXMgYnJva2VuIHRoZSBhc3RyYWwgY291bnRlci0gCnBhcnQgd291bGQgYWxzbyBiZSBkaXZpZGVkOyBidXQgaXQgd291bGQgCm5vdCBiZSBwb3NzaWJsZSB0byBicmVhayBhbiBhc3RyYWwgY291bnRlci0gCnBhcnQsIGFuZCBpbiB0aGF0IHdheSB0byBhZmZlY3QgdGhlIHBoeXMtIAppY2FsIG9iamVjdC4gSW4gb3RoZXIgd29yZHMgdGhlIGFjdCBvZiAKZnJhY3Rpb24gbXVzdCBiZWdpbiBvbiB0aGUgcGh5c2ljYWwgcGxhbmUuIAoKT25lIGNvdWxkIG9mIGNvdXJzZSBtb3ZlIGEgcHVyZWx5IGFzdHJhbCAKb2JqZWN0IGJ5IG1lYW5zIG9mIGFuIGFzdHJhbCBoYW5kIGlmIG9uZSAKd2lzaGVkLCBidXQgdW90IHRoZSBhc3RyYWwgY291bnRlcnBhcnQgb2YgYSAKcGh5c2ljYWwgb2JqZWN0Li4gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGlzIApsYXR0ZXIgZmVhdCBpdCB3b3VsZCAtYmUgbmVjZXNzYXJ5IHRvIG1hdGUtIApyaWFsaXNlIGEgaGFuZCBhbmQgbW92ZSB0aGUgcGh5c2ljYWwgb2JqZWN0LCAKCgozOTYgQURZQVIg4oCYVEFMS1MgCgoKd2hlbiB0aGUgYXN0cmFsIGNvdW50ZXJwYXJ0IHdvdWxkIG9mIGNvdXJzZSAKYWNjb21wYXZ5IGl0LiBUaGUgYXN0cmFsIGNvdW50ZXJwYXJ0IDFzIAp0aGVyZSBiZWNhdXNlIHRoZSBwaHlzaWNhbCBvYmplY3QgaXMgdGhlcmUsIApqdXN0IGFzIHRoZSBzY2VudCBvZiBhIHJvc2UgZmlsbHMgdGhlIHJvb20gCmJlY2F1c2UgdGhlIHJvc2UgaXMgdGhlcmUuIFRvIHN1Z2dlc3QgdGhhdCAKYnkgbW92aW5nIHRoZSBhc3RyYWwgY291bnRlcnBhcnQgb25lIGNvdWxkIAphbHNvIG1vdmUgdGhlIHBoeXNpY2FsIG9iamVjdCBpcyBsaWtlIHN1Zy0gCnZlc3RpbmcgdGhhdCBieSBtb3ZpbmcgdGhlIHNtZWxsIG9uZSBjb3VsZCAKbW92ZSB0aGUgcGh5c2ljYWwgcm9zZSB3aGljaCBjYXVzZXMgdGhlIHNtZWxsLiAKClRoZSBhc3RyYWwgYm9keSBjaGFuZ2VzIGl0cyBwYXJ0aWNsZXMgYXMgCmR2ZXMgdGhlIHBoeXNpY2FsLCBidXQgZm9ydHVuYXRlbHkgdGhlIGNsdW1zeSAKYW5lIHRpcmVzb21lIHByb2Nlc3Mgb2YgY29va2luZywgZWF0aW5nIGFuZCAKZGlnZXN0aW5nIGZvb2QgaXMgbm90IGEgbmVjZXNzaXR5IG9uIHRoZSBhcy0gCnRyYWwgcGxhbmUuIFRoZSBwYXJ0aWNsZXMgd2hpY2ggZmFsbCBhd2F5IAp3cmUgcmVwbGFjZWQgYnkgb3RoZXJzIGZyb20gdGhlIHN1cnJvdW5kaW5nIAphdG1vc3BoZXJlLiBUaGUgcHVyZWx5IHBoeXNpY2FsIGNyYXZpbmdzIG9mIApoYW5nZXIgYW5kIHRoaXJzdCBubyBsb25nZXIgZXhpc3QgdGhlcmU7IApidXQgdGhlIGRlc2lyZSBvZiB0aGUgZ2x1dHRvbiB0byBncmF0aWZ5IHRoZSAKc2Vuc2F0aW9uIG9mIHRhc3RlLCBhbmQgdGhlIGRlc2lyZSBvZiB0aGUgCmRydW5rYXJkIGZvciB0aGUgZXhoaWxhcmF0aW9uIHdoaWNoIGZvbGxvd3MsIApmdXIgbHVtLCB0aGUgYWJzb3JwdGlvbiBvZiBhbGNvaG9s4oCUdGhlc2UgYXJlIApib3RoIGFzdHJhbCwgYXVkIHRoZXJlZm9yZSB0aGV5IHN0aWxsIHBlcnNpc3QsIAphbmQgY2F1c2UgZXJlYXQgc3VmZmVyaW5nIGJlY2F1c2Ugb2YgdGhlIAphYnNlbmNlIG9mIHRoZSBwaHlzaWNhbCBib2R5IHRocm91Z2ggd2hpY2ggCmlsb25lIHRoZXkgY291bGQgYmUgc2F0aXNmaWVkLiAKClNvIGZhciBhcyB3ZSBhcmUgYXQgcHJlc2VudCBhd2FyZSB0aGUgCmFzdHJhbCBib2R5IGRvZXMgbm90IGFwcGVhciB0byBiZSBzdXNjZXB0LSAKaWJsZSB0byBmYXRpZ3VlLiAKCgpDT1VOVEVSUEFSVFMgMzk3IAoKClRoZSBvcmRpbmFyeSBtYW4gd2hpbGUgcG9zc2Vzc2luZyBhIApwaHlzaWNhbCBib2R5IG5hdHVyYWxseSBuZXZlciBoYXMgdGhlIApvcHBvcnR1bml0eSBvZiB3b3JraW5nIGZvciBhbnkgbGVuZ3RoIG9mIAp0aW1lIGNvbnNlY3V0aXZlbHkgdXBvdSB0aGUgYXN0cmFsIHBsYW5lLCAKdG9yIGhpcyB3aWdodHMgb2YgYXN0cmFsIHdvcmsgYWx0ZXJuYXRlIAp3aXRoIGRheXMgb2YgcGh5c2ljYWwgd29yay4gSSBrbmV3LCBob3ctIApldmVyLCBvZiBvbmUgY2FzZSBvZiBhIG1hbiB3aG8sIGhhdmluZyAKdGhlIHJpZ2h0IHRvIHRha2UgYSByYXBpZCByZWluY2FybmF0aW9uLCAKaGFkIHRvIHdhaXQgdXBvbiB0aGUgYXN0cmFsIHBsYW5lIHR3ZW50eS0gCmZpdmUgeWVhcnMgZm9yIHRoZSBzcGVjaWFsIGNvbmRpdGlvbnMgd2hpY2ggCmhlIHJlcXVpcmVkLiBIZSBzcGVudCB0aGUgd2hvbGUgb2YgdGhpcyAKdGltZSBpbiB3b3JraW5nLWZvciB0aGUgaGVscCBvZiBvdGhlcnMsIAp3aXRob3V0IGFueSBpbXRlcm1pc3Npb24gZXhjZXB0IHRoZSBvYy0gCmNhc2lvdmFsIGF0dGVuZGFuY2UgYXQgY2xhc3NlcyBoZWxkIOKAlCBieSAKcHVwaWxzIG9mIG91ciBNYXN0ZXJzOyBhbmQgaGUgYXNzdXJlZCBtZSAKdGhhdCBoZSBoYWQgbmV2ZXIgZmVsdCB0aGUgc2hnaHRlc3Qgc2Vuc2UgCm9mIGZhdGlndWXigJR0aGF0IGluIGZhY3QgaGUgaGFkXyBmb3Jnb3R0ZW4gCndoYXQgaXQgbWVhbnQgdG8gYmUgdGlyZWQuIAoKV2UgYWxsIGtub3cgdGhhdCBleGNlc3NpdmUgb3IgbG9uZy0gCmNvbnRpbnVlZCBlbW90aW9uIHRpcmVzIHVzIHZlcnkgcXVpY2tseSBpbiAKb3JkaW5hcnkgbGlmZSwgYW5kIHNpbmNlIGVtb3Rpb24gaXMgYW4gZXgtIApwcmVzc2lvbiBvZiB0aGUgYXN0cmFsLCB0aGF0IG1heSBwZXJoYXBzIGxlYWQgCnNvbWUgdG8gc3VwcG9zZSB0aGF0IGZhdGlndWUgb2YgdGhlIGFzdHJhbCAKYm9keSBpcyBwb3NzaWJsZS4gfCB0aGluaywgaG93ZXZlciwgdGhhdCBpdCAKd2lsbCBiZSBmb3VuZCB0aGF0IHdoYXQgaXMgc3ViamVjdCB0byBmYXRpZ3VlIAppcyBtZXJlbHkgdGhlIHBoeXNpY2FsIG9yZ2FuaXNtIHRocm91Z2ggCndoaWNo4oCZIGV2ZXJ5dGhpbmcgaW4gdXMgd2hpY2ggbWFuaWZlc3RzIG9uIAp0aGlzIHBsYW5lIG11c3QgcGFzcy4gV2hhdCB3ZSBjYWxsIG1lbnRhbCAKCgozOTggQURZQVIgVEFMS1MgCgoKZmF0aWd1ZSBpcyBhIHBhcmFsbGVsIGNhc2UuIFRoZXJlIGlzIG5vIHN1Y2ggCnRoaW5nIGFzIGZhdGlndWUgb2YgdGhlIG1pbmQ7IHdoYXQgd2UgY2FsbCAKYnkgdGhhdCBuYW1lIGlzIG9ubHkgZmF0aWd1ZSBvZiB0aGUgcGh5c2ljYWwgCmJyYWluIHRocm91Z2ggd2hpY2ggdGhhdCBtaW5kIGhhcyB0byBleC0gCnByZXNzIGl0c2VsZi4gCgpBIHNwZWN0YXRvciB3aG8gaGFzIG5vdCBiZWVuIGFibGUgdG8gCnJhaXNlIGhpcyBzaWdodCBhYm92ZSB0aGUgYXN0cmFsIGxldmVsIHdpbGwgb2YgCmNvdXJzZSBzZWUgb25seSBhc3RyYWwgbWF0dGVyIHdoZW4gaGUgbG9va3MgCmF0IHRoZSBhdXJhIG9mIGhpcyBmZWxsb3dlaW1lbi4gSGUgd2lsbCAKc2VlIHRoYXQuIHRoaXMgYXN0cmFsIG1hdHRlciDigJhub3Qgb25seSBzdXItIApyb3VuZHMgdGhlIHBoeXNpY2FsIGJvZHkgYnV0IGFsc28gaW50ZXItIApwZW5ldHJhdGVzIGl0LCBhbmQgdGhhdCB3aXRoaW4gdGhlIHBlcmlwaGVyeSBvZiAKdGhhdCBib2R5IGl0IGlzIG11Y2ggbW9yZSBkZW5zZWx5IGFnZ3JlZ2F0LSAKZWQgdGhhbiBtIHRoYXQgcGFydCBvZiB0aGUgYXVyYeKAmSB3aGljaCAKaGVzIG91dHNpZGUuIGhpcyBpcyBkdWUgdG8gdGhlIGF0dHJhY3Rpb24gCm9mIHRoZSBsYXJnZSBhbW91bnQgb2YgZGVuc2UgYXN0cmFsIG1hdHRlciAKd2hpY2ggaXMgZXZhdGhlcmVkIHRvZ2V0aGVyIHRoZXJlIGFzIHRoZSAKY291bnRlcnBhcnQgb2YgdGhlIGNlbGxzIG9mIHRoZSBwaHlzaWNhbCAKYm9keS4gCgpXaGVuIGR1cmluZyBzbGVlcCB0aGUgYXN0cmFsIGJvZHkgaXMgCmRyYXduIGZyb20gdGhlIHBoeXNpY2FsIHRoaXMgYXJyYW5nZW1lbnQgCnN0aWxsIHBlcnNpc3RzLCBhbmQgdGhlbiBhbnkgb25lIGxvb2tpbmcgYXQgCnRoZSBhc3RyYWwgYm9keSB3aXRoIGNsYWlydm92YW50IHZpc2lvbiAKd291bGQgc3RpbGwgc2VlLCBqdXN0IGFzIGJlZm9yZSwgYSBmb3JtID0gcmUtIApzZW1ibGluZyB0aGUgcGh5c2ljYWwgYm9keSBzdXJyb3VuZGVkIGJ5IAphbiBhdXJhLiBUaGF0IGZvcm0gd291bGQgbm93IGJlIGNvbm0tIApwb3NlZCBvbmx5IG9mIGFzdHJhbCBtYXR0ZXIsIGJ1dCBzdGlsbCB0aGUgCmdyZWF0IGRpZmZlcmV1Y2UgbWkgZGVuc2l0eSBiZXR3ZWVuIGl0IGFuZCAKCgpDT1VOVEVSUEFSVFMgLSAzOTkgCgoKaXRzIHN1cnJvdW5kaW5nIG1pc3Qgd291bGQgYmUgcXVpdGUgc3VmZmktIApjaWVudCB0byBtYWtlIGl0IGNsZWFybHkgZGlzdGluZ3Vpc2hhYmxlLCBldmVuIAp0aG91Z2ggaXQgaXMgaXRzZWxmIG9ubHkgYSBmb3JtIG9mIGRlbnNlciAKbWlzdC4gfCAKClRoZXJlIGlzIGEg4oCYY29uc2lkZXJhYmxlIGRpZmZlcmVuY2UgaW4gCmFwcGVhcmFuY2UgYmV0d2VlbiB0aGUgZXZvbHZlZCBhbmQgdGhlIAp1bmV2b2x2ZWQ6IG1hbi4gRXZlbiBpbiB0aGUgY2FzZSBvZiB0aGUgCmxhdHRlciDigJh0aGUgZmVhdHVyZXMgYW5kIHNoYXBlIG9mIHRoZSBpbm5lciAKZm9ybSBhcmUgcmVjb2duaXNhYmxlIGFsd2F5cywgdGhvdWdoIGJsdXJyZWQgCmFuZCBpbmRpc3RpbmN0IH4/IGJ1dCB0aGUgc3Vycm91bmRpbmcgZWdnIApzY2FyY2VseSBkZXNlcnZlcyB0aGUgbmFtZSwgZm9yIGl0IGlzIGluIApmYWN0IGEgbWVyZSBzaGFwZWxlc3Mgd3JlYXRoIG9mIG1pc3QsIApoYXZpbmcgbmVpdGhlciByZWd1bGFyaXR5IG5vciBwZXJtYW5lbmNlIApvZiBvdXRobmUuIAoKSW4gdGhlIG1vcmUgZGV2ZWxvcGVkIG1hbiB0aGUgY2hhbmdlIAppcyB2ZXJ5IG1hcmtlZCwgYm90aCBpbiB0aGUgYXVyYSBhbmQgdGhlIApmb3JtIHdpdGhpbiBpdC4gVGhpcyBsYXR0ZXIgaXMgbXVjaCBtb3JlIApkaXN0aW5jdCwgYW5kIGRlZmluaXRl4oCULWEgY2xvc2VyIHJlcHJvZHVjdGlvbiAKb2YgdGhlIG1hbuKAmXMgcGh5c2ljYWwgYXBwZWFyYW5jZTsgd2hpbGUgCmluc3RlYWQgb2YgdGhlIGZsb2F0aW5nIG1pc3Qtd3JlYXRoIHdlIHNlZSAKYSBzaGFycGx5IGRlZmluZWQgb3ZvaWQgZm9ybSBwcmVzZXJ2aW5nIAppdHMgc2hhcGUgdW5hZmZlY3RlZCBhbWlkc3QgYWxsIHRoZSB2YXJpZWQgCmN1cnJlbnRzIHdoaWNoIGFyZSBhbHdheXMgc3dpcmxpbmcgYXJvdW5kIAppdCBvbiB0aGUgYXN0cmFsIHBsYW5lLiBUaG91Z2ggdGhlIGFycmFuZ2UtIAptZW50LiBvZi4gdGhlIGFzdHJhbCBob2R5IGlzIGxhcmdlbHkgY2hhbmdlZCAKYWZ0ZXIgZGVhdGggYnkgdGhlIGFjdGlvbiBvZiB0aGUgZGVzaXJlLSAKZWxlbWVudGFsLCBzdWNoIGFsdGVyYXRpb24gZG9lcyBub3QgaW0gYW55IAp3YXkgYWZmZWN0IHRoZSByZWNvZ25pc2FiaWxpdHkgb2YgdGhlIGZvcm0gCgoKNDAwIHwuIEFEWUFIIFRBTEtTIAoKCndpdGhpbiB0aGUgZWdnLCDigJh0aG91Z2ggdGhlIG5hdHVyYWwgY2hhbmdlcyAKd2hpY2ggdGFrZSBwbGFjZSB0ZW5kIG9uIHRoZSB3aG9sZSB0byBtYWtlIAp0aGUgZm9ybSBncm93IHNvbWV3aGF0IGZhaW50ZXIgYW5kIG1vcmUgCnNwaXJpdHVhbCBpbiBhcHBlYXJhbmNlIGFzIHRpbWUgcGFzc2VzIG9uLiAKCgpDb25vdXJzIGl4IHRyYW4gQXN0cmFsIEJvbnkgCgoKQW55IGNvbXBhcmF0aXZlbHkgcGVybWFuZW50IGNvbG91ciBpbSAKdGhlIGFzdHJhbCBib2R5IG1lYW5zIGEgcGVyc2lzdGVudCB2aWJyYXRpb24sIAp3aGljaCBpbiB0aGUgY291cnNlIG9mIHRpbWUgcHJvZHVjZXMgaXRzIAplZmZlY3QgdXBvbiB0aGUgbWVudGFsIGJvZHksIGFuZCBhbHNvIHVwb24gCnRoZSBjYXVzYWwgYm9keSwgc28gdGhhdCB0aGUgaGlnaGVyIHF1YWxpdGllcyAKZGV2ZWxvcGVkIGJ5IHRoZSBoZmUgb24gdGhlLiBsb3dlciBwbGFuZXMgCmFyZSBncmFkdWFsbHkgYnVpbHQgaW50byB0aGUgcGVybWFuZW50IGNhdXNhbCAKYm9keSwgYW5kIHNvIGJlY29tZSB1YWxpdGllcyBvZiB0aGUgc291bCAKaXRzZWxmLiDigJhoZSBjb2xvdXJzIG1heSBiZSBtaW5nbGVkIHRvIGFueSAKZXh0ZW50OyBmb3IgZXhhbXBsZSwgYWZmZWN0aW9uIChyb3NlKSBtaW5nbGVkIAp3aXRoIHJlaGdpb3VzIGRldm90aW9uIChibHVlKSB3aWxsIGdpdmUgYSAKbG92ZWx5IHZpb2xldC4gW3QgaXMgb25seSB0aGUgZ29vZCB0aG91Z2h0IG9yIApmZWVsaW5nIHdoaWNoIGNhbiBwcm9kdWNlIGFuIGVmZmVjdCBpbiB0aGUgCmNhdXNhbCBib2R5LCBhbmQgc28gYmUgcGVybWFuZW50bHkgc3RvcmVkIAp1cCBhcyBwYXJ0IG9mIHRoZSBtYW4uIE90aGVyIGtpbmRzIG9mIAp0aG91Z2h0IGFuZCBmZWVsaW5nIHJlbWFpbiBpbiB0aGUgbG93ZXIgCnZlaGljbGVzIGFuZCBhcmUgY29tcGFyYXRpdmVseSBpbXBlcm1hbmVudC4gClRoZSBzaXplIG9mIGEgdGhvdWdodC1mb3JtIHNob3dzIHRoZSAKc3RyZW5ndGggb2YgdGhlIGVtb3Rpb24uIAoKClRIUiBDQVVTQUwgQk9EWSDigJQgNDAxIAoKCiQgCgoKVEhlIENhdXNhdCBCb255LiDigJggCgoKTm8gbnVtYmVyIG9mIHBoeXNpY2FsLiBib2RpZXMgY291bGQgZnVsbHkgCmNvbnRhaW4gdGhlIGNhdXNhbCBib2R5LCBhbnkgbW9yZSB0aGFuIGFueSAKbnVtYmVyIG9mIGxpbmVzIGNhbiBtYWtlIGEgc3F1YXJlLCBvciBhbnkgCm51bWJlciBvZiBzcXVhcmVzIGEgY3ViZS4gVGhlIGVnbyBwdXRzIApoaW1zZWxmIGRvd24gaW50byBoaXPigJkgdmFyaW91cyBib2RpZXMgd2l0aCAKdGhlIGhvcGUgb2YgZ2FpbmluZyB0d28gdGhpbmdz4oCUdG8gbWFrZSB0aGUgCmNhdXNhbCBib2R5IGxlYXJuIHRvIHJlc3BvbmQgdG8gbW9yZSB2aWJyYS0gCnRpb25zLCBhbmQgYWxzbyB0byBpbmNyZWFzZSBpdFMgc2l6ZS4gCk1vc3QgcGVvcGxlIGFyZSBub3QgbW9yZSB0aGFuIGp1c3QgY29uLSAKc2Npb3VzIGluIHRoZSBjYXVzYWwgYm9keS4gVGhlIHN0cmluZ3MgCm9mIHN1Y2ggZWdvcyBjYW5ub3QgaGUgcGxheWVkIHVwb24gZGlyZWN0bHksIApidXQgYXJlIGFmZmVjdGVkIGZyb20gYmVsb3cgYnkgd2F5IG9mIG92ZXItIAp0b25lcy4gTW9zdCBtZW4gY2FuIGF0IHByZXNlbnQgb25seSwgd29yayAKb24gdGhlIG1hdHRlciBvZiB0aGUgdGhpcmQgc3ViLXBsYW5lIG9mIHRoZSAKbWVudGFsICh0aGUgbG93ZXN0IHBhcnQgb2YgdGhlaXIgY2F1c2FsIGJvZGllcyksIAphbmQgaW5kZWVkIG9ubHkgdGhlIGxvd2VyIG1hdHRlciBldmVuIG9mIAp0aGF0IGlzIHVzdWFsbHkgaW4gb3BlcmF0aW9uLiBXaGVuIHRoZXkgYXLDqSAKb24gdGhlIFBhdGgsIHRoZSBzZWNvbmQgc3ViLXBsYW5lIG9wZW5zIAp1cC4gVGhlIGFkZXB0IHVzZXMgdGhlIHdob2xlIGNhdXNhbCBib2R5IAp3aGlsZSBoaXMgY29uc2Npb3VzbmVzcyAxOCBvbiB0aGUgcGh5c2ljYWwgCnBsYW5lLiBBIHJvdWdoIGFuZCByZWFkeSB3YXkgb2YgZGVjaWRpbmcgCmF0IHdoYXQgc3RhZ2UgYSBtYW4gXyBzdGFuZHMgaXMgdG8gbG9vayBhdCAKdGhlIGNhdXNhbCBib2R5LiBJdCBzaG93cyBhbHNvIGhvdyBoZSAKYXJyaXZlZCB0aGVyZS4gTWVuIGRldmVsb3BlIHVuZXF1YWxseeKAlHdlIAphcmUgYWxsIHVuZGV2ZWxvcGVkIGluIHNvbWUgd2F5LiBBbiBhbmltYWwgCgoKaGFzIGEgbWluaW11bS1zaXplZCBjYXVzYWwgYm9keSBhcyBzb29uIGFzIAo1MSAKCgo0MDIgQURZQVIgVEFMS1MgCgoKaGUgaXMgaW5kaXZpZHVhaHNlZDsgdGhlbiBpdCBoYXMgdG8gYmUgCmRldmVsb3BlZCBib3RoIGFzIHRvIHNpemUgYW5kIGNvbG91ci4gCgoKVEhlIERlc3RyZS1ITEVNRU5UQUwgCgoKTXVjaCBvZiB0aGUgbWF0dGVyIG9mIHRoZSBhc3RyYWwgYm9keSAKaXMgdml2aWZpZWQgYnkgZWxlbWVudGFsIGVzc2VuY2UsIHdoaWNoIGlzIApjdXQgb2ZmIGZvciB0aGUgdGltZSBiZWluZyBmcm9tIHRoZSBnZW5lcmFsIAptYXNzIHdoaWNoIGJlbG9uZ3MgdG8gdGhlIHBsYW5lLCBhbmQgX2JlLSAKY29tZXMgdGhlIG1hbuKAmXMgZXhwcmVzc2lvbiBvbiB0aGF0IHBsYW5lLiAKVGhpcyBpcyBhIGxpdmluZywgdGhvdWdoIG5vdCBhbiBpbnRlbGxpZ2VudCAKZXNzZW5jZS4gQnV0IGl0IGhhcyBhIGtpbmQgb2YgaW1zdGluY3Qgd2hpY2ggCk1yLiBTaXVuZXR0IGNhbGxzIOKAmGRhd25pbmcgaW50ZWxsaWdlbmNlLOKAnSAKd2hpY2ggZ3VpZGVzIGl0IGludG8gZ2V0dGluZyB3aGF0IGl0IHdhbnRzLiAKQmxpbmRseSBhbmQgd2l0aG91dCByZWFzb24sIGJ1dCBpbnN0aW5jdGl2ZWx5LCAKaXQgc2Vla3MgaXRzIGVuZHMsIGFuZCBzaG93cyBncmVhdCBpbmdlbnVpdHkgCmluIG9idGFpbmluZyBpdHMgZGVzaXJlcyBhbmQgaW4gZnVydGhlcmluZyAKaXRzIGV2b2x1dGlvbi4gCgpFdm9sdXRpb24gZm9yIGl0IGlzIGEgZGVzY2VudCBpbnRvIG1hdHRlcjsgCml0cyBhaW0gaXMgdG8gYmVjb21lIGEgbWluZXJhbCBtb25hZC4gVGhlcmUtIApmb3JlLCBpdHMgb2JqZWN0IGluIGxpZmUgaXMgdG8gZ2V0IGFzIG5lYXIgCnRvIHRoZSBwaHlzaWNhbCBwbGFuZSBhcyBpdCBjYW4sIHRvIGNvbWUgaW50byAKY29udGFjdCB3aXRoIGFzIG1hbnkgb2YgdGhlIHZpYnJhdGlvbnMgb2YgdGhlIApjb2Fyc2VyIGtpbmQgYXMgcG9zc2libGUuIEl0IGtub3dzIG5vdGhpbmcgCm9mIHlvdTsgaXQgY291bGQgbm90IGtub3cgb3IgaW1hZ2luZSBhbnktIAp0aGluZyBvZiB5b3U7IGJ1dCBpdCBkb2VzIHJlYWxpc2UgdGhhdCBpdCAKCgpUSEUgREVTSVJFLUVMRU1FTlRBTCB8IDQwMyAKCgppcyBhcGFydCBmcm9tIHRoZSBnZW5lcmFsIHN0b2NrLCBhbmQgdGhhdCAKaXQgaXMgZ29vZCB0byBiZSBhcGFydC4gSXQgaXMgbm90IGEgZGV2aWwsIAphbmQgeW91IG11c3Qgbm90IGdldCB0aGUgaWRlYSB0aGF0IGl0IGlzIAp0byBiZSBoYXRlZC4gCgpJdCBpcyBwYXJ0IG9mIHRoZSBEaXZpbmXigJkgTGlmZSwganVzdCAKYXMgeW91IGFyZTsgYnV0IGl0cyBpbnRlcmVzdHMgYXJlIGRpYW1ldHJpLSAKY2FsbHkgb3Bwb3NlZCB0byB5b3Vycy4gSnQgd2FudHMgdG8gZXZvbHZlIApkb3dud2FyZHM7IHlvdSB3YW50IHRvIGV2b2x2ZSB1cHdhcmRzLiAKSXQgZGVzaXJlcyB0byBwcmVzZXJ2ZSBpdHMgc2VwYXJhdGUgbGlmZSwgYW5kIAppdCBmZWVscyB0aGF0IGl0IGNhbiBkbyBzbyBvbmx5IGJ5IG1lYW5zIG9mIAppdHMgY29ubmVjdGlvbiB3aXRoIHlvdS4gSXQgaXMgY29uc2Npb3VzIG9mIGEgCnNvbWV0aGluZyB3aGljaCBpcyB5b3VyIGxvd2VyIG1pbmQsIGFuZCAKcmVhbGlzZXMgdGhhdCBpZiBpdCBjYW4gZW5nbG9iZSwgYXMgaXQgd2VyZSwgCnRoaXMgbWluZCwgYW5kIHBlcnN1YWRlIHlvdSB0aGF0IGl0cyBhbmQgCnlvdXIgaW50ZXJlc3RzIGFyZSBvbmUsIHlvdSB3aWxsIGluY3JlYXNpbmdseSAKc3VwcGx5IGl0IHdpdGggdGhlIHNlbnNhdGlvbnMgaXQgZGVzaXJlcy4gCldoZW4gaXQgZ2V0cyB0aGUgbWF0dGVyIHN1ZmZpY2llbnRseSBlbi0gCnRhbmdsZWQgdG8gc3VpdCBpdHMgcHVycG9zZSwgeW91IGNhbm5vdCB0aGVuIAp3aXRoZHJhdyBpdCwgdGhlIHJlc3VsdCBiZWluZyB0aGF0IHNvbWUgb2YgCnRoaXMgbWF0dGVyIG9mIHRoZSBsb3dlciBtaW5kIGlzXyB0aGVuIGxvc3QgCnRvIHlvdSBhbHRvZ2V0aGVyIGluIHRoZSBsaWZlIGFmdGVyIGRlYXRoLiAKClNvLCB5b3Ugc2VlLCBoZXJlIGlzIHRoZSBkZXNpcmUtZWxlbWVudGFsIApzZWVraW5nIGl0cyBvd24gZW5kczsgbm90IGtub3dpbmcgdGhhdCBpdCAKaXMgaW5qdXJpbmcgeW91IGJ5IHRyeW1nIHRvIGVudGFuZ2xlIHlvdXIgCmxvd2VyIG1pbmQuIFRoZSBtb3JlIGl0IGNhbiBkbyB0aGlzIHRoZSAKYmV0dGVyIGZvciBpdCwgZm9yIHRoZSBtb3JlIG1lbnRhbCBtYXR0ZXIgCml0IGNhbiBlbnRhbmdsZSB0aGUgbG9uZ2VyIHdpbGwgYmUgaXRzIGFzdHJhbCAKaGlmZeKAlHRoYXQgbGlmZSBzdGlsbCBlbmR1cmluZyBldmVuIGFmdGVyIHlvdSAKCgo0MDQuIEFEWUFSIFRBTEtTIAoKCmhhdmUgcGFzc2VkIGludG8gdGhlIGhlYXZlbi13b3JsZCwgSW4gVGhlby0gCnNvcGhpY2FsIHBocmFzZW9sb2d5IGl0IGlzIHRoZW4ga25vd24gYXMgdGhlIApzaGFkZS4gWW93IGJ1c2luZXNzIGlzIG5vdCB0byBhbGxvdyB5b3Vyc2VsZiAKdG8gYmUgZGVjZWl2ZWQgOyBpdCB1bmRlcnN0YW5kcyBub3RoaW5nIG9mIHlvdXIgCmV2b2x1dGlvbiwgYW5kIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgaXQ7IGl0IApzaW1wbHkgdHJpZXMgdG8gdHVybiB5b3UgdG8gaXRzIG93biBwdXJwb3NlLiAKWW91IG91Z2h0IHRvIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbiwgYW5kIApyZWZ1c2UgdG8gYmUgZHJhd24uIERvIGxldCB1cyByZWFsaXNlIHRoaXM6IAp0aGF0IHRoaXMgZWxlbWVudGFsIGlzIG5vdCBvbnJzZWx2ZXMuIEl0IDFzIApuZXZlciB5b3UhIHdobyBkZXNpcmUgdGhlc2UgbG93ZXIgdGhpbmdzLCBidXQgCnRoaXMgY3JlYXR1cmUuIAoKSXQgaXMgbm90IHNvIG11Y2ggdGhhdCAud2UgaGF2ZSB0byAKbWFrZSBhIGdyZWF0IGZpZ2h0IGFnYWlzdCBpdCwgYnV0IHdlIApzaG91bGQgc2hha2Ugb3Vyc2VsdmVzIGZyZWUsIHNheWluZzog4oCcIFRoaXMgCmlzIG5vdCBJOyBJIGRvIG5vdCB3YW50IHRoaXMgbG93ZXIgdGhpbmcu4oCdIApTb21lYm9keSB3YW50cyBpdC4gWWVzLCBpdCBpcyB0aGlzIGVsZW1lbnQtIAphbDsgYW5kIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBsaWtlcyAKYW5kIHdhbnRzLCBmb3IgaW0geW91ciBsYXN0IGhmZSB5b3UgbWFkZSAKaXQgd2hhdCBpdCBpcy4gTm90IHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvbGxlYy0gCnRpb24gb2YgYXN0cmFsIG1hdHRlciBhbmQgZWxlbWVudGFsIGVzc2VuY2UgCmV4aXN0ZWQgdGhlbjsgaXQgZGlkIG5vdCwgZm9yIGl0IHdhcyBuZXdseSAKdmF0aGVyZWQgdG9nZXRoZXIgYXQgeW91ciBiaXJ0aCB0aGlzIHRpbWUuIApCdXQgaXQgSXMgYW4gZXhhY3QgcmVwcm9kdWN0aW9uIG9mIHRoZSAKbWF0dGVyIGltIHlvdXIgYXN0cmFsIGJvZHkgYXQgdGhlIGVuZCAKb2YgeW91ciBsYXN0IHVzdHJhbCBsaWZlLiBOZXZlcnRoZWxlc3MgaXQgaXMgCm5vdCB5b3U7IGFuZCB5b3UgbXVzdCBldmVyIGJlYXIgdGhpcyBtIAptaW5kIGFsbCB0aHJvdWdoIGxpZmUsIGFuZCBldmVuIG1vcmUgCmR1cmluZyB0aGUgbGlmZSBhZnRlciBkZWF0aCwgZm9yIHRoZW4gaXQgCgoKVEhFIERFU0lSRS1FTEVNRU5UQUwgQU9EIAoKCmhhcyBzdGlsbCBncmVhdGVyIHBvd2VyIHRvIGRlY2VpdmUuIHlvdS4gCgpCdXQgeW91IG1heSB0aGluayB0aGF0IGJ5IHRodXMgcmVmdXNpbmcgdG8gCmFsbG93IGl0IHRvIGluZmx1ZW5jZSB5b3UsIHlvdSBhcmUgY2hlY2tpbmcgaXRzIApldm9sdXRpb24uIE5vdCBhdCBhbGwuIFlvdSBhcmUgZG9pbmcgYmV0dGVyIGZvciAKdGhlIGVsZW1lbnRhbCBpZiB5b3UgY29udHJvbCB0aGUgbG93ZXIgcGFzc2lvbnMsIAphbmQgdGFrZSBhIGZpcm0gc3RhbmQgb2YgeW91ciBvd24uIEl0IGlzIAp0cnVlIHlvdSBkbyBub3QgZGV2ZWxvcGUgYSB2ZXJ5IGxvdyBwYXJ0IApvZiBpdDsgYnV0IHlvdSBtYXkgZHJvcCB0aGUgbG93ZXIgYW5kIApldm9sdmUgdGhlIGhpZ2hlci4gQW4gYW5pbWFsIGNhbiBzdXBwbHkgCnRoZSBsb3dlciBraW5kcyBvZiB2aWJyYXRpb25zIGV2ZW4gYmV0dGVyIAp0aGFuIHlvdSBjYW4geW91cnNlbGYsIHdoZXJlYXMgbm9uZSBidXQgCm1hbiBjYW4gZXZvbHZlIHRoZSBoaWdoZXIgdHlwZSBvZiBlc3NlbmNlLiAKCkFmdGVyIHRoZSBkZWF0aCBvZiB0aGUgcGh5c2ljYWwgYm9keSB0aGUgCm9yZGluYXJ5IG1hbiwgd2hvIGhhcyBuZXZlciBoZWFyZCBhbGwgdGhpcywgCmZpbmRzIGhpbXNlbGYgd2hlbiBoZSB3YWtlcyB1cCBvbiB0aGUgb3RoZXIgCnNpZGUgaW4gYSB0b3RhbGx5IHVuZXhwZWN0ZWQgY29uZGl0aW9uIG9mIAp3ZmZhaXJzLCBhbmQgaXMgZ2VuZXJhbGx5IG1vcmUgb3IgbGVzcyBkaXMtIAp0dXJiZWQgdGhlcmVieS4gRmluYWxseSwgaGUgYWNjZXB0cyB0aGVzZSAKY29uZGl0aW9ucyB3aGljaCBoZSBkb2VzIG5vdCB1bmRlcnN0YW5kLCAKdGhpbmttZyB0aGVtIG5lY2Vzc2FyeSBhbmQgaW5ldml0YWJsZS4gU29tZSAKbm8gZG91YnQgYXJlLCBidXQgc29tZSBhcmUgbm90LCBhbmQgd2l0aCAKa25vd2xlZGdlIHRoZSBsYXR0ZXIgY291bGQgYmUgdHJhbnNjZW5kZWQuIAoKVGhlIGVsZW1lbnRhbCBpcyBhZnJhaWQsIGJlY2F1c2UgaXQga25vd3MgCnRoYXQgdGhlIGRlYXRoIG9mIHRoZSBwaHlzaWNhbCBib2R5IG1lYW5zIAp0aGF0IHRoZSB0ZXJtIG9mIGl0cyBzZXBhcmF0ZWQgbGlmZSBpcyBKaW1pdGVkIDsgCml0IGtub3dzIHRoYXQgdGhlIG1hbuKAmXMgYXN0cmFsIGRlYXRoIHdpbGwgCm1vcmUgb3IgbGVzcyBxdWlja2x5IGZvbGxvdywgYW5kIHdpdGggaXQgCnRoZSBsb3NzIHRvIGl0IG9mIHZpdmlkIGFuZCB0bXRlbnNlIHNlbnNhdGlvbnMuIAoKCjQwNiBBRFlBUiBUQUxLUyAKCgpDb25zZXF1ZW50bHkgaXQgYWRvcHRzIHRoZSBiZXN0IHBsYW4gaXQgY2FuIAp0aGluayBvZiBmb3IgdGhlIHByZXNlcnZhdGlvbiBvZiB0aGUgbWFu4oCZcyAKYXN0cmFsIGJvZHkuIEl0IGV2aWRlbnRseSBrbm93cyBlbm91Z2ggb2YgCmFzdHJhbCBwaHlzaWNzIHRvIHJlYWxpc2UgdGhhdCB0aGUgY29hcnNlc3QgbWF0dGVyIApjYW4gaG9sZCB0b2dldGhlciBsb25nZXN0LCBhbmQgYmVzdCBzdGFuZCAKZnJpY3Rpb24uIFNvIGl0IGFycmFuZ2VzIHRoZSBtYXR0ZXIgaW4gcmluZ3MsIAp0aGUgY29hcnNlc3Qgb24gdGhlIG91dHNpZGUuIEFuZCBpbiBzby1kb2luZyAKaXQgaXMgcmlnaHQsIGZyb20gaXRzIHBvaW50IG9mIHZpZXcuIER1cmluZyAKcGh5c2ljYWwgbGlmZSB0aGUgYXN0cmFsIGJvZHkgKmlzIGxpa2Ugc3dpcmwtIAppbmcsIGJvaWxpbmcgd2F0ZXIsIGJ1dCBhZnRlciBkZWF0aCBpdCAKYXJyYW5nZXMgdGhlIG1hdHRlciBpbiBhIHNlcmllcyBvZiBncmFkdWF0ZWQgCnNoZWF0aHMsIHNvIHRoYXQgZnVsbCBjaXJjdWxhdGlvbiBpcyBpbXBvc3NpYmxlLiAKCk5vdyB0aGVyZSBhcmUgbm8gc2Vuc2Ugb3JnYW5zIGluIHRoZSBhc3RyYWwgCmJvZHkuIOKAmFRoZXJlIGFyZSBpbiBpdCBvcmdhbnMgY29ycmVzcG9uZGluZyAKdG8gdGhlIHBoeXNpY2FsIHNlbnNlLW9yZ2FucywgYnV0IHlvdSBkbyAKbm90IHNlZSwgaGVhciBhbmQgc21lbGwgd2l0aCB0aGVtLiBZb3UgCmhlYXIgYW5kIHNlZSBhbGwgb3ZlciB0aGUgc3VyZmFjZSBvZiB0aGUgCmJvZHkuIEhhY2ggc3ViLXBsYW5lIGhhcyBpdHMgb3duIG1hdHRlciA7IAphbmQgaXQgMXMgYnkgbWVhbnMgb2YgdGhlIG1hdHRlciBvZiB0aGF0IApzdWItcGxhbmUgaW4geW91ciBib2R5IHRoYXQgeW91IGNhbiByZS0gCnNwb25kIHRvIGl0cyB2aWJyYXRpb25zLiBXaGF0ZXZlciBtYXR0ZXIgMXMgCm9uIHRoZSBvdXRzaWRlIChvciBzdXJmYWNlKSBvZiB5b3VyIGJvZHkgCnJlc3BvbmRzIHRvIHRoZXNlIHZpYnJhdGlvbnMsIGFuZCB5b3Ugc2VlIApvciBoZWFyIGJ5IGl0IGFsb25lLiBDb25zZXF1ZW50bHksIHdoYXQgCmhhcyBoYXBwZW5lZCBpcyB0aGlzOiB0aGUgZWxlbWVudGFsIGhhcywgCmJ5IHRoaXMgYXJyYW5nZW1lbnQgb2YgdGhlIG1hdHRlciBvZiB5b3VyIApib2R5LCBzaHV0IHlvdSB1cCwgYXMgaXQgd2VyZSwgaW4gYSBib3ggCm9mIGFzdHJhbCBtYXR0ZXIsIHdoaWNoIGVuYWJsZXMgeW91IHRvIHNlZSAKCgpIRSBERVNJUkUtRUxFTUVOVEFMIDRRNyAKCgphbmQgaGVhciB0aGluZ3Mgb2YgdGhlIGxvd2VzdCBhbmQgY29hcnMtIAplc3QgcGxhbmUgb25seS4gSWYgeW91IG9iamVjdCB0byBiZWluZyAKc2h1dCB1cCBpbiB0aGlzIHdheSwgaXQgZW5kZWF2b3VycyB0byAKbWFrZSB5b3UgYmVsaWV2ZSB0aGF0IHVubGVzcyB5b3UgZG8gdGh1cyAKZmlybWx5IHJvb3QgeW91cnNlbGYgaW50byB0aGUgbG93ZXIgbWF0dGVyIAp5b3Ugd2lsbCBmbG9hdCBvZmYsIGFuZCBsb3NlIHlvdXJzZWxmIGluIGEgCm5lYnVsb3VzIHZhZ3VlbmVzcy4gCgpCdXQgaWYsIG9uIHRoZSBvdGhlciBoYW5kLCB5b3Ugd2VyZSB0byAKc2V0IHlvdXIgd2lsbC4gdG8gb3Bwb3NlIGl0LCB0aGVuIGF0IG9uY2UgCnRoZXJlIHdvdWxkIGJlIGEgZGlmZmVyZW5jZS4gVGhlIHBhcnRpY2xlcyAKb2YgdGhlIGFzdHJhbCBib2R5IHdvdWxkIGJlIGtlcHQgYWxsIAppbnRlcm1pbmdsZWQsIGFzIG0gaGZlOyBhbmQgeW91IHdvdWxkLCBpbiAKY29uc2VxdWVuY2UsIGJlIGZyZWUgb2YgYWxsIHRoZSBzdWItcGxhbmVzLiAKClRoZSBmaW5hbCBzdHJ1Z2dsZSB3aXRoIGl0IHRha2VzIHBsYWNlIGF0IAp0aGUgY29uY2x1c2lvbiBvZiB0aGUgYXN0cmFsIGxpZmUsIGZvciB0aGVuIAp0aGUgZWdvIGVuZGVhdm91cnMgdG8gZHJhdyBiYWNrIGludG8gaGltLSAKc2VsZiBhbGwgdGhhdCBoZSBwdXQgZG93biBpbnRvIGltZWFybmF0aW9uIAphdCB0aGUgYmVnaW5pbmcgb2YgdGhlIGxpZmUgd2hpY2ggaGFzIGp1c3QgCmNsb3NlZOKAlHRvIHJlY292ZXIgYXMgaXQgd2VyZSB0aGUgcHJpbmNpcGFsIAp3aGljaCBoZSBoYXMgaW52ZXN0ZWQsIHBsdXMgdGhlIGludGVyZXN0IG9mIAp0aGUgZXhwZXJpZW5jZSB3aGljaCBoYXMgYmVlbiBnYWluZWQgYW5kIAp0aGUgcXVhbGl0aWVzIHdoaWNoIGhhdmUgYmVlbiBkZXZlbG9wZWQgCmR1cmluZyB0aGF0IGxpdGUuIEJ1dCB3aGVuIGhlIGF0dGVtcHRzIAp0byBkbyB0aGlzIGhlIGlzIG1ldCB3aXRoIGRldGVybWluZWQgCm9wcG9zaXRpb24gZnJvbSB0aGlzIGRlc2lyZS1lbGVtZW50YWwsIHdoaWNoIApoZSBoaW1zZWxmIGhhcyBjcmVhdGVkIGFuZCBmZWQuIC4gCgpUaG91Z2ggaXQgY2FuIGhhcmRseSBiZSBkZXNjcmliZWQgYXMgCmludGVsaGdlbnQsIGl0IGhhcyBhIF8gc3Ryb25nIGluc3RpbmN0IG9mIAoKCjRBUTggQURZQVIgVEFMS1MgCgoKc2VsZi1wcmVzZXJ2YXRpb24sIHdoaWNoIGxlYWRzIGl0IHRvIHJlc2lzdCAKd2l0aCBhbGwgdGhlIGZvcmNlIGF0IGl0cyBjb21tYW5kIHRoZSBleC0gCnRpbmN0aW9uIHdoaWNoIHRocmVhdGVucyBpdC4gSW4gdGhlIGNhc2Ugb2YgCmFsbCBvcmRpbmFyeSBtb3J0YWxzIGl0IGF0dGFpbnMgYSBjZXJ0YWluIAptZWFzdXJlIG9mIHNuZWNlc3MgaW4gaXRzIGVmZm9ydHMsIGZvciBtdWNoIApvZiB0aGUgbWVudGFsIGZhY3VsdHkgaGFzIGR1cmluZyBsaWZlLiBiZWVuIApnb3Zlcm5lZCBieSB0aGUgbG93ZXIgZGVzaXJlcyBhbmQgcHJvcy0gCnRpdHV0ZWQgdG8gdGhlaXIgc2VydmljZSwgb3IgaW4gb3RoZXIgd29yZHMgCnRoZSBsb3dlciBtaW5kIGhhcyBiZWVuIHNvIHNlcmlvdXNseSBlbi0gCnRhbmdsZWQgYnkgZGVzaXJlIHRoYXQgaXQgaXMgaW1wb3NzaWJsZSBmb3IgCml0IHRvIGJlIGVudGlyZWx5IGZyZWVkLiBUaGUgcmVzdWx0IG9mIHRoZSAKc3RydWdnbGUgaXMgdGhlcmVmb3JlIHRoYXQgc29tZSBwb3J0aW9uIApvZiB0aGUgbWVudGFsIG1hdHRlciBhbmQgZXZlbiBvZiBjYXVzYWwgCm1hdHRlciBpcyByZXRhaW5lZCBpbiB0aGUgYXN0cmFsIGJvZHkgCmFmdGVyIHRoZSBlZ28gaGFzIGNvbXBsZXRlbHkgYnJva2VuIGF3YXkgCmZyb20gaXQuIFdoZW4gYSBtYW4gaGFzIGR1cmluZyBsaWZlIApjb21wbGV0ZWx5IGNvbnF1ZXJlZCBoaXMgbG93ZXIgZGVzaXJlcyBhbmQgCnN1Y2NlZWRlZCBpbiBhYnNvbHV0ZWx5IGZyZWVpbmcgdGhlIGxvd2VyIAptaW5kIGZyb20gZGVzaXJlLCB0aGVyZSBpcyBwcmFjdGljYWxseSBubyAKc3RydWdnbGUsIGFuZCB0aGUgZWdvIHJlY2xhaW1zIGluIGZ1bGwgYm90aCAKcHJpbmNpcGFsIGFuZCA9IGludGVyZXN0OyBidXQgdGhlcmUgaXMgdW4tIApmb3J0dW5hdGVseSBhbiBvcHBvc2l0ZSBleHRyZW1lIHdoZW4gaGUgaXMgCmFibGUgdG8gcmVjbGFpbSBuZWl0aGVyLiAKClNvIG91ciBidXNpbmVzcywgYm90aCBkdXJpbmcgbGlmZSBhbmQgYWZ0ZXIgCmRlYXRoLCBpcyB0byBjb250cm9sIHRoaXMgZGVzaXJlLWVsZW1lbnRhbCwgCmFuZCBub2cgbGV0ICMgY29udHJvbCB1cy4gUmVhbGlzZSB0aGF0IHlvbiAKYXJlIGEgZ29kIGluIHRoZSBtYWtpbmcuIEFsbCB0aGUgcG93ZXIgCmFuZCBmb3JjZSBvZiB0aGUgdW5pdmVyc2UgYXJlIG9uIHlvdXIgc2lkZS4gCgoKVEhFIERFU0lSRS1FTEVNRU5UQUwgNEFEWSAKCgpUaGUgcmVzdWx0IGlzIGNlcnRhaW4uIFJhbmdlIHlvdXJzZWxmIG9uIAp0aGUgc2lkZSBvZiB0aGUgTGF3LCBhbmQgYWxsIHdpbGwgYmUgCnNpbXBsaWZpZWQuIAoKQWJzb2x1dGUgY29udHJvbCBvZiBwYXNzaW9ucyBpcyBlbWluZW50bHkgCmRlc2lyYWJsZSwgYnV0IGlzIG9idGFpbmVkIGJ5IGZldy4gWW91IGhhdmUgCnRvIGtlZXAgdm91ciB0ZW1wZXIgb24gdGhlIGFzdHJhbCBwbGFuZS4gCllvdSBzZWUgbWFueSBkcmVhZGZ1bCB0aGluZ3MsIGFuZCBpZiB5b3UgCmhhdmUgbm90IGFsbCBmZWVsaW5ncyB0aG9yb3VnaGx5IHVuZGVyIGNvbnRyb2wgCnlvdSBtYXkgZWFzaWx5IGRvIHNvbWV0aGluZyBmb3Igd2hpY2ggeW91IAp3aWxsIGJlIHNvcnJ5LiBEb3duIGhlcmUgcGVvcGxlIG9mdGVuIApjb21taXQgY2FzdWFsIGJydXRhbGl0eSBhbmQgdGhpbmsgbm90aGluZyAKb2YgaXQ7IGEgY2FsbG91cyBzY2hvb2xtYXN0ZXIsIGZvciBleGFtcGxlLCAKYmVhdHMgYSBjaGlsZCB3aXRob3V0IHJlYWxpc2luZyBoaXMgd2lja2VkLSAKbmVzczsgYnV0IG9uIHRoZSBhc3RyYWwgcGxhbmUgdGhlIGhlaW5vdXMtIApuZXNzIG9mIHN1Y2ggYSBjcmltZSBpcyBhdCBvbmNlIG9idmlvdXMsIAphbmQgZXZlbiB0aGUgYXdmdWwgaG9ycm9ycyBvZiB0aGUga2FybWEgCndoaWNoIGl0IGVudGFpbHMgbWF5IG9mdGVuIGJlIHNlZW4uIE9uIAp0aGUgYXN0cmFsIHlvdSBzZWUgdGhlIGZ1bGwgZWZmZWN0cyBvZiBldmVuIAphbiB1bmtpbmQgd29yZC4g4oCYVHJlbWVuZG91cyBhbmRfIHZpb2xlbnQgCnBhc3Npb25zIG1heSBvZnRlbiBhdHRyYWN0IGxvdyBraW5kcyBvZiAKYmVpbmdzLCB3aG8gZW50ZXIgaW50byB0aGXigJkgdGhvdWdodC1mb3JtcyAKYW5kIGVuam95IHRoZSB2aWJyYXRpb25zLiBTdWNoIGFuaW1hdGVkIAp0aG91Z2h0LWZvcm1zIG1heSBsYXN0IGZvciB2ZWFycywgYW5kIGV2ZW4gCnByb2R1Y2UgcG9sdGVyZ2Vpc3QgcGhlbm9tZW5hLiAKCgo0MTAgQU5EWUFSIFRBTEtTIAoKCkxhc3IgU291cyAKCgpJdCBpcyBhbiB1bnNwZWFrYWJsZSByZWxpZWYgdG8gYmUgc2V0IApmcmVlIGh5IHRoZSBjb21tb24tc2Vuc2Ugb2YgVGhlb3NvcGhpY2FsIAp0ZWFjaGluZyBmcm9tIHRoZSBhd2Z1bCBuaWdodG1hcmUgb2YgLSB0aGUgCmRvY3RyaW5lIG9mIGV0ZXJuYWwgZGFtbmF0aW9uIHdoaWNoIGlzIHN0aWxsIApoZWxkIGJ5IHRoZSBtb3JlIGlnbm9yYW50IGFtb25nIHRoZSAKQ2hyaXN0aWFucywgd2hvIGRvIG5vdCB3bmRlcnN0YW5kIHRoZSByZWFsIAptZWFuaW5nIG9mIGNlcnRhaW4gcGhyYXNlcyAsIGF0dHJpYnV0ZWQgaW4gCnRoZWlyIGdvc3BlbHMgdG8gdGhlaXIgRm91bmRlci4gQnV0IHNvbWUgCm9mIG91ciBzdHVkZW50cywgZmlsbGVkIHdpdGggZ2xhZCBlbnRodXNpYXNtIApieSB0aGUgZ2xvcmlvdXMgZGlzY292ZXJ5IHRoYXQgZXZlcnkgdW5pdCAKbXVzdCBmaW5hbGx5IGF0dGFpbiBwZXJmZWN0aW9uLCBmaW5kIHRoZWlyIApqb3kgc29tZXdoYXQgZGFtcGVkIGJ5IGdydWVzb21lIGhpbnRzIAp0aGF0LCBhZnRlciBhbGwsIHRoZXJlIGFyZSBjb25kaXRpb25zIHVuZGVyIAp3aGljaCBhIHNvdWwgbWF5IGJlIGxvc3QsIGFuZCB0aGV5IGJlZ2luIAp0byB3b25kZXIgd2hldGhlciB0aGUgcmVpZ24gb2YgZGl2aW5lIGxhdyAKaXMgcmVhbGx5IHVuaXZlcnNhbCwgb3Igd2hldGhlciB0aGVyZSBpcyBub3QgCnNvbWUgbWV0aG9kIGJ5IHdoaWNoIG1hbiBjYW4gY29udHJpdmUgCnRvIGVzY2FwZSBmcm9tIHRoZSBkb21pbmlvbiBvZiB0aGUgTG9jb3MgCmFuZCBkZXN0cm95IGhpbXNlbGYuIExldCBzdWNoIGRvdWJ0ZXJzIAp0YWtlIGNvbWZvcnQ7IHRoZSBXaWxsIG9mIHRoZSBMb2dvcyBpcyAKaW5maW5pdGVseSBzdHJvbmdlciB0aGFuIGFueSBodW1hbiB3aWxsLCAKYW5kIG5vdCBldmVuIHRoZSB1dG1vc3QgZXhlcnRpb24gb2YgCnBlcnZlcnNlIGluZ2VudWl0eSBjYW4gcG9zc2libHkgcHJldmFpbCBhZ2FpbnN0IApIaW0uIAoKSXQgaXMgdHJ1ZSB0aGF0IEhlIGFsbG93cyBtYW4gdG8gdXNlIApoaXMgZnJlZS13aWxsLCBidXQgb25seSB3aXRoaW4gY2VydGFpbiB3ZWxsLSAKCgpMT1NUIFNPVUxTIC4gNDQ3IAoKCmRlZmluZWQgbGltaXRzOyBpZiB0aGUgbWFuIHVzZXMgdGhhdCDigJQgd2lsbCAKd2VsbCwgdGhvc2UgbGltaXRzIGFyZSBxdWlja2x5IHdpZGVuZWQsIGFuZCAK4oCYbW9yZSBhbmQgbW9yZSBwb3dlciBvdmVyIGhpcyBvd24gZGVzdGlueSAKaXMgZ2l2ZW4gdG8gaGltOyBidXQgaWYgaGUgdXNlcyB0aGF0IHdpbGwgCmZvciBldmlsLCBoZSB0aGVyZWJ5IGluY3JlYXNlcyBoaXMgbGltaXRhdGlvbnMsIApzbyB0aGF0IHdoaWxlIGhpcyBwb3dlciBmb3IgZ29vZCBpcyAKcHJhY3RpY2FsbHkgdW5ib3VuZGVkLCBiZWNhdXNlIGl0IGhhcyBpbiAKaXQgdGhlIHBvdGVudGlhbGl0eSBvZiBpbmZpbml0ZSBncm93dGgsIGhpcyAKcG93ZXIgZm9yIGV2aV0gaXMgcmlnaWRseSByZXN0cmljdGVkLiBBbmQgCnRoaXMgbm90IGJlY2R1c2Ugb2YgYW55IGltZXF1YWxpdHkgaXMgdGhlIAppbmNpZGVuY2Ugb2YgdGhlIGxhdywgYnV0IGJlY2F1c2UgaW4gdGhlIApvbmUgY2FzZSBoZSBleGVydHMgaGlzIHdpbGwgaW4gdGhlIHNhbWUgCi1kaXJlY3Rpb24gYXMgdGhhdCBvZiB0aGUgTG93b3MsIGFuZCBzbyBpcyAKc3dpbW1pbmcgd2l0aCB0aGUgZXZvbHV0aW9uYXJ5IHRpZGUsIHdoaWxlIAppbiB0aGUgb3RoZXIgaGUgaXMgc3RydWdnbGluZyBhZ2FpbnN0IGl0LiAKVGhlIHRlcm0g4oCYbG9zdCBzb3Vs4oCZIGlzIG5vdCB3ZWxsIGNob3NlbiwgCmZvciBpdCAxcyBhbG1vc3QgY2VydGFpbiB0byBiZSBtaXN1bmRlcnN0b29kLCAKYW5kIHRha2VuIHRvIGltcGx5IG11Y2ggbW9yZSB0aGFuIGl0IApyZWFsbHkgbWVhbnMuIEluIGV2ZXJ5LWRheSBwYXJsYW5jZSwgdGhlIAp3b3JkIOKAmHNvdWzigJkgaXMgdXNlZCB3aXRoIGV4YXNwZXJhdGluZyAKdmFndWVuZXNzLCBidXQgb24gdGhlIHdob2xlIGl0IGlzIGdlbmVyYWxseSAKc3VwcG9zZWQgdG8gZGVub3RlIHRoZSBzdWJ0bGVyIGFuZCBtb3JlIApwZXJtYW5lbnQgcGFydCBvZiBtYW4sIHNvIHRoYXQgdG8gdGhlIAptYW4gaW4gdGhlIHN0cmVldCB0byBsb3NlIG9uZeKAmXMgc291bCBtZWFucyAKdG8gbG9zZSBvbmVzZWxmLCB0byBiZSBsb3N0IGFsdG9nZXRoZXIuIFRoYXQgCmlzIHByZWNpc2VseSB3aGF0IGNhbiBuZXZlciBoYXBwZWk7IHRoZXJlLSAKZm9yZSB0aGUgZXhwcmVzc2lvbiBpcyBtaXNsZWFkaW5nLCBhbmQgYSAKY2xlYXIgc3RhdGVtZW50IG9mIHRoZSBmYWN0cyB3aGljaCBpdCAuc29tZS0gCgoKNDEyIEFEWUFSIFRBTEtTIAoKCndoYXQgaW5hY2N1cmF0ZWx5IGxhYmVscyBtYXkgYmUgb2YgdXNlIHRvIApzdHVkZW50cy4gT2Ygc3VjaCBmYWN0cyB0aGVyZSBzZWVtIHRvIGJlIAp0aHJlZSBjbGFzc2VzOyBsZXQgdXMgY29uc2lkZXIgdGhlbSBvbmUgYnkgb25lLiAKMS4gVGhvc2Ugd2hvIHdpbGwgZHJvcCBvdXQgb2YgdGhpcyBldm8tIApsdXRpb24gaW4gdGhlIG1pZGRsZSBvZiB0aGUgZmlmdGggcm91bmQuIFRoaXMgCmRyb3BwaW5nIG91dCBpcyBwcmVjaXNlbHkgdGhlIHd6b25pYW4gKG5vdCAKZXRlcm5hbCkgY29uZGVtbmF0aW9uIG9mIHdoaWNoIHRoZSBDaHJpc3QgCnNwb2tlIGFzIGEgdmVyeSByZWFsIGRhbmdlciBmb3Igc29tZSBvZiAKSGlzIHVuYXdha2V1ZWQgaGVhcmVyc+KAlHRoZSBjb25kZW1uYXRpb24gCm1lYW5pbmcgbWVyZWx5IHRoZSBkZWNpc2lvbuKAmSB0aGF0IHRoZXkgYXJlIAppbmNhcGFibGUgYXMgeWV0IG9mIHRoZSBoaWdoZXIgcHJvZ3Jlc3MsIApidXQgbm90IGltcGx5bWcgYmxhbWUgZXhjZXB0IGluIGNhc2VzIAp3aGVyZSBvcHBvcnR1bml0aWVzIGhhdmUgYmVlbiBuZWdsZWN0ZWQuIApUaGVvc29waHkgdGVhY2hlcyB1cyB0aGF0IG1lbiBhcmUgYWxsIApicm90aGVycywgYnV0IHVvdCB0aGF0IHRoZXkgYXJlIGFsbCBlcXVhbC4gClRoZXJlIGFyZSBtaW1lbnNlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbSA7IAp0aGV5IGhhdmUgZW50ZXJlZCB0aGUgaHVtYW4gZXZvbHV0aW9uIGF0IAp2YXJpb3VzIHBlcmlvZHMsIHNvIHRoYXQgc29tZSBhcmUgbXVjaCAKb2xkZXIgc291bHMgdGhhbiBvdGhlcnMsIGFuZCB0aGV5IHN0YW5kIGF0IAp2ZXJ5IGRpZmZlcmVudCBsZXZlbHMgb24gdGhlIGxhZGRlciBvZiBkZS0gCnZlbG9wbWVudC4g4oCYVGhlIG9sZGVyIHNvdWxzIHVhdHVyYWxseSBsZWFybiAKbXVjaCBtb3JlIHJhcGlkbHkgdGhhbiB0aGUgeW91bmdlciwgYW5kIApzbyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGVtIHN0ZWFkaWx5IGluLSAKY3JlYXNlcywgYW5kIGV2ZW50dWFsbHkgYSBwb2ludCBpcyByZWFjaGVkIAp3aGVyZSB0aGUgY29uZGl0aW9ucyBuZWNlc3NhcnkgZm9yIHRoZSBvbmUgCnR5cGUgYXJlIGVudGlyZWx5IHVuc3VpdGFibGUgZm9yIHRoZSBvdGhlci4gCldlIG1heSBvYnRhaW4gYSB1c2VmdWwgd29ya2luZyBhbmFsb2d5IApieTogdGhpbmtpbmcgLm9mIHRoZSBjaGlsZHJlbiBpbiBhIGNsYXNzIGF0IAoKCkxPU1QgU09VTFMgLiA0NDMgCgoKc2Nob29sLiBUaGUgdGVhY2hlciBvZiB0aGUgY2xhc3MgaGFzIGEgCnllYXLigJlzIHdvcmsgYmVmb3JlIGhpbSwgdG8gcHJlcGFyZSBoaXMgYm95cyAKZm9yIGEgY2VydGFpbiBleGFtaW5hdGlvbi4gSGUgcGFyY2VscyBvdXQgCnRoZSB3b3Jr4oCUc28gbXVjaCBmb3IgdGhlIGZpcnN0IG1vbnRoLCAKc28gbXVjaCBmb3IgdGhlIHNlY29uZCwgYW5kIHNvIG9uLCBiZWdpbi0gCndpbmcuIG9mIGNvdXJzZSB3aXRoIHdoYXQgaXMgZWFzaWVzdCBhbmQgCmxlYWRpbmcgZ3JhZHVhbGx5IHVwIHRvIHdoYXQgaXMgbW9yZSAKZGlmZmljdWx0LiBCdXQgdGhlIGJveXMgYXJlIG9mIHZhcmlvdXMgCmFnZXMgYW5kIGNhcGFjaXRpZXM7IHNvbWUgbGVhcm4gcmFwaWRseSBhbmQgCmFyZSBpbiBhZHZhbmNlIG9mIHRoZSBhdmVyYWdlLCB3aGlsZSBzb21lIApsYWcgYmVoaW5kLiBOZXcgYm95cywgdG9vLCBhcmUgY29uc3RhbnRseSAKY29taW5nIGludG8gaGlzIGNsYXNzLCBzb21lIG9mIHRoZW0gYmFyZWx5IAp1cCB0byBpdHMgbGV2ZWwuIFdoZW4gaGFsZiB0aGUgeWVhciBoYXMgCnJ1biBpdHMgY291cnNlLCBoZSByZXNvbHV0ZWx5IGNsb3NlcyB0aGUgCmxpc3QgZm9yIGFkbWlzc2lvbnMsIGFuZCBkZWNsaW5lcyB0byByZWNldHZlIAp3bnkgbW9yZSBuZXcgYm95cy4gCgpUaGF0IHRvb2sgcGxhY2UgZm9yIHVzIGF0IHRoZSBubmRkbGUgCnBvaW50IG9mIHRoaXMgZm91cnRoIHJvdW5kLCBhZnRlciB3aGljaCB0aGUgCmRvb3Igd2FzIHNodXQgZm9yIHBhc3NhZ2UgZnJvbSB0aGUgYW11bmFsIApraW5nZG9tIGludG8gdGhlIGh1bWFuLCBzYXZlIGZvciBhIGZldyAKZXhjZXB0aW9uYWwgY2FzZXMsIHdoaWNoIGJlbG9uZywgYXMgaXQgd2VyZSwgCnRvIHRoZSBmdXR1cmU7IGp1c3QgYXMgeW91IGhhdmUgYV8gZmV3IAptZW4gYXR0YWluaW5nIGFkZXB0c2hpcCwgd2hvIGFyZSBub3QgYmUtIApsYXRlZCByZW1uYW50cyBvZiB0aGUgbW9vbuKAmXMgYWRlcHRzLCBidXQgCnBlb3BsZSBpbiBhZHZhbmNlIG9mIHRoZSByZXN0IG9mIGh1bWFuaXR5LCAKbHUgdGhlIHNhbWUgd2F5IHRoZXJlIGFyZSBhIGZldyBhbmltYWxzIAphdCB0aGUgc3RhZ2Ugb2YgaW5kaXZpZHVhbGlzYXRpb24sIHdoaWNoIHRoZSAKZ2VuZXJhbGl0eSBhcmUgZXhwZWN0ZWQgdHkgcmVhY2ggYXQgdGhlIGVuZCAKCgo0XSA0LCBBRFlBUiBUQUxLUyAKCgpvZiB0aGUgc2V2ZW50aCByb3VuZC4gT3UgdGhlIG5leHQgcGxhbmV0IAphbiBhcnJhbmdlbWVudCB3aWxsIGJlIG1hZGUgYnkgd2hpY2ggCnRoZXNlIGV4Y2VwdGlvbnMgd2lsbCBoYXZlIHRoZSBvcHBvcnR1bml0eSAKb2YgdGFraW5nIHByaW1pdGl2ZSBodW1hbiBib2RpZXMuIAoKQSBsaXR0bGUgbGF0ZXIgdGhlIHRlYWNoZXIgY2FuIGFscmVhZHkgCmNsZWFybHkgZm9yZXNlZSB0aGF0IHNvbWUgb2YgaGlzIGJveWcgd2lsbCAKY2VydGFpbmx5IHBhc3MgdGhlIGV4YW1pbmF0aW9uLCB0aGF0IHRoZSAKY2hhbmNlIG9mIG90aGVycyBpcyBkb3VidGZ1bCwgYW5kIHRoYXQgdGhlcmUgCnVyZSB5ZXQgb3RoZXJzIHdobyBhcmUgc3VyZSB0byBmYWlsLiBJdCAKd291bGQgYmUgcXVpdGUgcmVhc29uYWJsZSBpZiBoZSBzaG91bGQgc2F5IAp0byB0aGVzZSBsYXN0OiAKCuKAnFdlIGhhdmUgbm93IHJlYWNoZWQgYSBzdGFnZSB3aGVuIHRoZSAKZnVydGhlciB3b3JrIG9mIHRoaXMgY2xhc3MgaXMgdXNlbGVzcyBmb3IgeW91LiAKWW91IGNhbm5vdCBwb3NzaWJseSBieSBhbnkgZWZmb3J0IGF0dGFpbiAKdGhlIG5lY2Vzc2FyeSBzdGFuZGFyZCBpbiB0aW1lIGZvciB0aGUgZXgtIAphbWluYXRpb247IHRoZSBtb3JlIGFkdmFuY2VkIHRlYWNoaW5nIAp3aGljaCBtdXN0IG5vdyBiZSBnaXZlbiB0byB0aGUgb3RoZXJzIHdvdWxkIApiZSBlbnRpcmVseSB1bnN1aXRlZCBmb3IgeW91LCBhbmQgYXMgeW91IApjb3VsZCBub3QgdW5kZXJzdGFuZCBpdCB5b3Ugd291bGQgYmUgbm90IApvbmx5IHdhc3RpbmcgeW91ciBvd24gdGltZSBidXQgd291bGQgYmUgCmEgaGluZHJhbmNlIHRvIHRoZSByZXN0IG9mIHRoZSBjbGFzcy4gSXQgCndpbGwgdGhlcmVmb3JlIGJlIGJldHRlciBmb3IgeW91IGF0IG9uY2UgdG8gCnRyYW5zZmVyIHlvdXJzZWx2ZXMgdG8gdGhlIG5leHQgY2xhc3MgYmVsb3cgCnRoaXMsIHBlcmZlY3QgeW91cnNlbHZlcyB0aGVyZSBpbiB0aGUgcHJlbGktIAptaW5hcnkgbGVzc29ucyB3aGljaCB5b3UgaGF2ZSBub3QgeWV0IAp0aG9yb3VnaGx5IGxlYXJuZWQsIGFuZCBjb21lIGJhY2sgdG8gdGhpcyAKbGV2ZWwgd2l0aCBuZXh0IHllYXLigJlzIGNsYXNzLCB3aGVuIHlvdSB3aWxsIApiZSBzdXJlIHRvIHBhc3Mgd2l0aCBjcmVkaXQu4oCdIHwgCgoKTE9TVCBTT1VMUy4gQUxTIAoKClRoYXQgaXMgZXhhY3RseSB3aGF0IHdpbGwgYmUgZG9uZSBpbiB0aGUgCm1pZGRsZSBvZiB0aGUgZmlmdGggcm91bmQuIFRob3NlIHdobyAKY2Fubm90IGJ5IGFueSBlZmZvcnQgcmVhY2ggdGhlIHByZXNjcmliZWQgCmdvYWwgaW4gdGhlIHRpbWUgd2hpY2ggcmVtYWlucyB3aWxsIGJlIHB1dCAKYmFjayBpbnRvIGEgbG93ZXIgY2xhc3MsIGFuZCBpZiB0aGUgY2xhc3MtIApyb29tIC5kb29ycyBhcmUgbm90IHlldCBvcGVuIHRoZXkgd2lsbCB3YWl0IAppbiBwZWFjZSBhbmQgaGFwcGluZXNzIHVudGlsIHRoZSBhcHBvaW50ZWQgCnRpbWUuIFRoZXkgbWF5IGJlIGRlc2NyaWJlZCBhcyBsb3N0IHRvIAp3cywgbG9zdCB0byB0aGlzIHBhcnRpY3VsYXIgaHR0bGUgd2F2ZSBvZiAKZXZvbHV0aW9uIHRvIHdoaWNoIHdlIGJlbG9uZzsgdGhleSBhcmUgbm8gCmxvbmdlciDigJxtZW4gb2Ygb3VyIHllYXLigJ0gYXMgd2Ugc2F5IGF0IApDb2xsZWdlLiBCdXQgdGhleSB3aWxsIHZlcnkgY2VydGFpbmx5IGJlIArigJxtZW4gb2YgdGhlIG5leHQgeWVhcuKAmeKAlGV2ZW4gbGVhZGluZyBtZW4gCmluIGl0LCBiZWNhdXNlIG9mIHRoZSB3b3JrIHRoYXQ6IHRoZXkgaGF2ZSAKYWxyZWFkeSBkb25lIGFuZCB0aGUgZXhwZXJpZW5jZSB0aGF0IHRoZXkgCmhhdmUgYWxyZWFkeSBoYWQuIAoKTW9zdCBvZiB0aGVzZSBwZW9wbGUgZmFpbCBiZWNhdXNlIHRoZXkgCmFyZSB0b28geW91bmcgZm9yIHRoZSBjbGFzcywgYWx0aG91Z2ggdGhleSAKd2VyZSB0b28gb2xkIHRvIGJlIHB1dCBpbiB0aGUgZmlyc3QgcGxhY2UgCmludG8gdGhlIGNsYXNzIGJlbG93LiDigJhUaGV5IGhhdmUgaGFkIHRoZSAKYWR2YW50YWdlIG9mIGdvaW5nIHRocm91Z2ggdGhlIGZpcnN0IGhhbGYgCm9mIHRoZSB5ZWFy4oCZcyB3b3JrLCBhbmQgdGhleSB3aWxsIHRoZXJlZm9yZSAKdGFrZSBpdCB1cCBhZ2FpbiBuZXh0IHRpbWUgcmVhZGlseSAKYW5kIGVhc2lseSwgYW5kIHdpbGwgYmUgYWJsZSB0byBoZWxwIHRoZWlyIAptb3JlIGJhY2t3YXJkIGZlbGxvdy1wdXBpbHMgd2hvIGhhdmUgbm90LiAKaGFkIHRoZWlyIGFkdmFudGFnZXMuIEZvciB0aG9zZSB3aG8gYXJlIAp0b28geW91bmcgZm9yIHRoZSB3b3JrIHRoZXJlIGlzIG5vIGJsYW1lIAppbiBmYWlsdXJlLiAKCgo0OjE2IEFEWUFSIFRBTEtTIAoKCi0gQnV0IHRoZXJlLCBpcyBhbm90aGVyIGxhcmdlIGNsYXMgd2hlIAptaWdodCBzdWNjZWVkIGJ5IGRldGVybWluZWQgXyBlZmZvcnQsIApidXQgZmFpbCBmb3Igd2FudCBvZiB0aGF0IGVmZm9ydC4gVGhlc2UgCmV4YWN0bHkgY29ycmVzcG9uZCB0byB0aGUgYm95IHdobyBkcm9wcyAKYmVoaW5kIGhpcyBjbGFzcyAubm90IGhlY2F1c2UgaGUgaXNfIHRvbyAKeW91bmcsIGJ1dCBiZWNhdXNlIGhlIGlzIHRvbyBsYXp5IHRvIGRvIGhpcyAKd29yay4gSGlzIGZhdGUgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiAKdGhlIG90aGVycywgYnV0IGl0IGlzIG9idmlvdXMgdGhhdCB3aGlsZSAKdGhleSB3ZXJlIGJsYW1lbGVzcyBiZWNhdXNlIC50aGV5IGRpZCB0aGVpciAKYmVzdCwgaGUgaXMgYmxhbWV3b3J0aHkgcHJlY2lzZWx5IGJlY2F1c2UgCmhlIGRpZCBub3QgZG8gaGlzOyBzbyBoZSB3aWxsIGNhcnJ5IHdpdGggCmhpbSBhIGxlZ2FjeSBvZiBldmlsIGthcm1hIGZyb20gd2hpY2ggCnRoZXkgYXJlIGZyZWUuIEl0IGlzIHRvIG1lbiBvZiB0aGF0IGNsYXNzIAp0aGF0IHRoZSBDaHJpc3TigJlzIGV4aG9ydGF0aW9ucyB3ZXJlIGFkZHJlc3NlZCAK4oCUbWVuIHdobyBoYWQgdGhlIG9wcG9ydHVuaXR5IGFuZCBhYmlsaXR5IHRvIApzdWNjZWVkLCBidXQgd2VyZSBub3QgbWFraW5nIHRoZSBuZWNlc3NhcnkgCmVmZm9ydC4gCgpJdCBpcyBvZiB0aGVzZSB0aGF0IE1hZGFtZSBCbGF2YXRza3kgCnNwZWFrcyBpbiBzdWNoIHZpZ29yb3VzIHRlcm1zIGFzIOKAnHVzZWxlc3MgCmRyb25lcyB3aG8gcmVmdXNlIHRvIGJlY29tZSBjby13b3JrZXJzIHdpdGggCk5hdHVyZSwgYW5kIHdobyBwZXJpc2ggYnkgbWlsbGlvbnMgZHVyaW5nIAp0aGUgbWFudmFudGFyaWMgbGlmZS1jeWNsZS7igJ0gKFN2ZXJldCBEb2N0cmluZSwgCmlpaSwgNTI2LikgQnV0IG5vdGUgdGhhdCB0aGlzIOKAmCBwZXJpc2hpbmfigJkgaXMgCm1lcmVseSBmcm9tIHRoaXMg4oCYbWFudmFudGFyaWMgbGlmZS1jeWNsZSzigJkgCmFuZCB0aGF0IGl0IG1lYW5zIGZvciB0aGVtIGRlbGF5IG9ubHksIGFuZCAKbm90IHRvdGFsIGV4dGluY3Rpb24uIERlbGF5IGlzIHRoZSB3b3JzdCAKdGhhdCBjYW4gaGFwcGVuIHRvIHBlb3BsZSBpbiB0aGUgb3JkaW5hLSAKcnkgY291cnNlIG9mIGV2b2x1dGlvbi4gU3VjaCBhIGRlbGF5IGlzIAoKCkxPU1QgU09VTFMgKDRkPyAKCgpfQm5kb3didGVkbHkgbW9zdCBzZXJpb3VzLCBidXQsIGJhZCB0aG91Z2ggCml0IGJlLCBpdC4gaXMgdGhlIGJlc3QgdGhhdCBjYW4gYmUgZG9uZSB1bmRlciAKdGhlIGNpcmN1bXN0YW5jZXMuIElmIGVpdGhlciB0aHJvdWdoIHlvdXRoLCAKb3IgdGhyb3VnaCBsYXppbmVzcyBhbmQgXyBwZXJ2ZXJzaXR5LCB0aGVzZSAKcGVvcGxlIGhhdmUgZmFpbGVkLCBpdCBpYSBjbGVhciB0aGF0IHRoZXkgbmVlZCAKbW9yZSwgdHJhaW5pbmcsIGFuZCB0aGlzIHRyYWluaW5nIHRoZXl+IG11c3QgCmhhdmUuIE9idmlvdXNseSB0aGF0IGlzIGJlc3QgZm9yIHRoZW0sIApldmVuIHRob3VnaCBpdH0gbWVhbnMgbWFueSBsaXZlc+KAlGxpdmVzLCAKbWFueSAub2Ygd2hpY2ggbWF5IGJlIGRyZWFyeSwgYW5kIG1heSAKZXZlbiBjb250YWlu4oCZIG11Y2ggc3VmZmVyaW5nLiBTdGlsbCwgdGhleSAKbXVzdCBnbyB0aHJvdWdoIHRvIHRoZSBlbmQsIGJlY2F1c2UgdGhhdCAKaXMgdGhlIG9ubHkgd2F5IGJ5IHdoaWNoIHRoZXkgY2FuIGF0dGFpbiAKdGhlIGxldmVsIHdoaWNoIHRoZSBtb3JlIGFkdmFuY2VkIHJhY2VzIApoYXZlIGFscmVhZHkgcmVhY2hlZCB0aHJvdWdoIHNpbWlsYXIgbG9uZyAKY29udGludWVkIGV2b2x1dGlvbi4gCgpJdCB3YXMgd2l0aCB0aGUgb2JqZWN0IG9mIHNhdmluZyBhcyBtYW55IApwZW9wbGUgYXMgcG9zc2libGUgZnJvbSB0aGF0IGFkZGl0aW9uYWwgc3VmLSAKZmVybWcgdGhhdCB0aGUgQ2hyaXN0IHNhaWQgdG8gSGlzIGRpc2NpcGxlczogCuKAnOKAnEdvIHllIGludG8gYWxsIHRoZSB3b3JsZCBhbmQgcHJlYWNoIHRoZSAKZ29zcGVsIHRvIGV2ZXJ5IGNyZWF0dXJlOyBoZSB0aGF0IGJlbGlldmV0aCAKYW5kIGlzIGJhcHRpc2VkIHNoYWxsIGJlIHNhdmVkLCBidXQgaGUgdGhhdCAKYmVsaWV2ZXRoIG5vdCBzaGFsbCBiZSBkYW1uZWQu4oCdIEZvciBiYXAtIAp0aXNtIGFuZCBpdHMgY29ycmVzcG9uZGluZyByaXRlcyBpbiBvdGhlciAKcmVsaWdpb25zIGFyZSB0aGUgc2lnbiBvZiB0aGUgZGVkaWNhdGlvbiBvZiAKdGhlIGxpZmUgdG8gdGhlIHNlcnZpY2Ugb2YgdGhlIEJyb3RoZXJob29kLCAKYW5kIHRoZSBtYW4gd2hvIGlzIGFibGUuIHRvIGdyYXNwIHRoZSAKdHJ1dGgsIGFuZCBjb25zZXF1ZW50bHksIHNldHMgaGlzIGZhY2UgaW4gdGhlIApyaWdodCBkaXJlY3Rpb24sIHdpbGwgY2VydGFpbmx5IGJlIGFtb25nIHRoZSAKCgo1MyAKCgo0MS44IC1zQURZQVIgflRBTEtTIAoKCuKAmHNhdmVk4oCZIG9yIOKAmHNhZmUs4oCZIHdobyBlc2NhcGUgdGhlIC5jb25kZW1uLSAKYXRpb24uIGludGhlIGZpZnRoIHJvdW5kOyB3aGlsZSB0aG9zZSB3aGUgCmTDqSAubm90IHRha2UgdGhlIHRyb3VibGUgdG8gc2VlIHRoZS4gdHJ1dGggCmFuZCBmb2xsb3cgaXQgd2lsbCBhc3N1cmVkbHkgZmFsbCB1bmRlciB0aGF0IApjb25kZW1uYXRpb24uIEJ1dCByZW1lbWJlciBhbHdheXMgdGhhdCwgCnRoZSDigJhkYW1uYXRpb27igJkgbWVhbnMgb25seSByZWplY3Rpb24gZnJvbSAKdGhpcyDigJh3b27igJkgb3IuIGNoYWluIG9mIHdvcmxkcywgYSB0aHJvd2luZyAKaGFjayBpbnRvIHRoZSAtbmV4dCBvZiB0aGUgc3VjY2Vzc2l2ZSBsaWZlLSAKd2F2ZXMuIOKAmExvc3Qgc291bHMs4oCZIGlmIHlvdSwgd2lsbDsgbG9zdCB0byAKdXMsIHBlcmhhcHMsIGJ1dCBub3QgdG8gdGhlIExvY29zOyBzbyB0aGV5IAp3b3VsZCBiZSBiZXR0ZXIgZGVzY3JpYmVkIGFzIHRlbXBvcmFyaWx5IGxhaWQgCmFzaWRlLiBPZiBjb3Vyc2UgaXQgbXVzdCBub3QgYmUgc3VwcG9zZWQgCnRoYXQgdGhlIOKAmGLDqWhlZuKAmT8gd2hpY2ggc2F2ZXMgdGhlbSBpcyB0aGUgCmtub3dsZWRnZSBvZiDigJhUaGVvc29waHk7IGl0IGRvZXMgbm90IG1hdHRlciAKaW4gdGhlIGxlYXN0IHdoYXQgdGhlaSByZWxpZ2lvbiBpcywgc28gbG9uZyAKYXMgdGhleSBhcmUgYWltaW5nIGF0IHRoZSBzcGlyaXR1YWwgbGlmZSwgc28gCmxvbmcgYXMgdGhleSBoYXZlIGRlZmluaXRlbHkgcmFuZ2VkIHRoZW0tIApzZWx2ZXMgb24gdGhlIHNpZGUgb2YgZ29vZCBhcyBhZ2FpbnN0IGV2aWwsIAphbmQgYXJlIHdvcmtpbmcgdW5zZWxmaXNobHkgb253YXJkIGFuZCAKdXB3YXJkLiAKCjIuIENhc2VzIGluIC13aGljaCB0aGUgcGVyc29uYWxpdHkgaGFzIApiZWVuIHNvIG11Y2ggZW1waGFzaXNlZCB0aGF0IHRoZSBlZ28gaXMgCmFsbW9zdCBzaHV0IG91dCBmcm9tIGl0LiBPZiB0aGVzZSB0aGVyZSAKYXJlIHR3byB2YXJpZXRpZXPigJR0aG9zZSB3aG8gbGl2ZSBvbmx5IGluIAp0aGVpciBwYXNzaW9ucywgYW5kIHRob3NlIHdobyBsaXZlIG9ubHkgaW4gCnRoZWlyIG1pbmRzOyBhbmQgYXMgYm90aCB0eXBlcyBhcmUgYnkgbm8gCm1lYW5zIHVuY29tbW9uIGl0IGlzIHdvcnRoIHdoaWxlIHRvIHRyeSAKdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyB0byB0aGVtLCAKCgpMT1NUIFNPVUxTOiA0MTkgCgoKV2U6IG9mdGVuIHNwZWFrIG9mIHRoZSBlZ28gYXMgcHV0dGluZyAKaGltc2VsZiBkb3duIGludG8gdGhlIG1hdHRlciBvZiB0aGUgbG93ZXIgCnBsYW5lcywgeWV0IG1hbnkgc3R1ZGVudHMgZmFpbCB0by0gcmVhbGlzZSAKdGhhdCB0aGlzIGlzIG5vdCBhIG1lcmUgZmlndXJlIG9mIHNwZWVjaCwgCmJ1dCBoYXMgYSB2ZXJ5IGRlZmluaXRlIGFuZCB2ZXJ5IG1hdGVyaWFsIApzaWRlICwgdG8gaXQuIFRoZSBlZ28gZHdlbGxzIG0gYSBjYXVzYWwgCmJvZHksIGFuZCB3aGVuIGhlIHRha2VzIHVwb24gSW5tZXNlbGYgaW0gCmFkZGl0aW9uIDIgbWVudGFsIGF2ZCBhbiBhc3RyYWwgYm9keSwgdGhlIApvcGVyYXRpb24gaW52b2x2ZXMgdGhlIGFjdHVhbCBlbnRhbmdsaW5nIG9mIAphdyBwb3J0aW9uIG9mIOKAmHRoZSBtYXR0ZXIgb2YgaGlzIGNhdXNhbCBib2R5IAp3aXRoLiBtYXR0ZXIgb2YgdGhvc2UgbG93ZXIgYXN0cmFsIGFuZCAKbWVudGFsIHR5cGVzLiBXZSBtYXkgcmVnYXJkIHRoaXMg4oCYIHB1dC0gCnRpbmcgZG93buKAmSBhcyBhIGtpbmQgb2YgaW52ZXN0bWVudCBtYWRlIApieSB0aGUgZWdvLiBBcyBpbiBhbGwgaW52ZXN0bWVudHMsIHNvIGluIAp0aGlzOyBoZSBob3BlcyB0byBnZXQgYmFjayBtb3JlIHRoYW4gaGUgCnB1dHMgb3V0LCBidXQgdGhlcmUgaXMgYSByaXNrIG9mIGRpc2FwcG9pbnQtIAptZW504oCUYSBwb3NzaWJpbGl0eSB0aGF0IGhlIG1heSBsb3NlIHNvbWUtIAp0aGluZyBvZiB3aGF0IGhlIGludmVzdHMsIG9yIHVuZGVyIHZlcnkgCmV4Y2VwdGlvbmFsIGNpcmN1bXN0YW5jZXMgdGhlcmUgbWF5OiAuIGV2ZW4gCmJlIGEgdG90YWwgbG9zcyB3aGljaCBsZWF2ZXMgaGltLCBub3QgaW5kZWVkIAphYnNvbHV0ZWx5IGJhbmtydXB0LCBidXQgd2l0aG91dCBhdmFpbGFibGUgCmNhcGl0YWwuIAoKTGV0IHVzIGNvbnNpZGVyIHRoZS4gZWxhYm9yYXRpb24gb2YgdGhpcyAKYW5hbG9neS4gVGhlIGVnbyBwb3NzZXNzZXMgbSBoaXMgY2F1c2FsIApiZWR5IG1hdHRlciBvZiB0aHJlZSBsZXZlbHPigJR0aGUgZmlyc3QsIHNlY29uZCAKYW5kIHRoaXJkIHN1Yi1wbGFuZXMgb2YgdGhlIG1lbnRhbDsgYnV0IGZvciAKdGhlIGVub3Jtb3VzIG1ham9yaXR5IG9mIG1hbmtpbmQgdGhlcmUgaXMgCmFzIHlldCBubyBhY3Rpdml0eSBiZXlvbmQgdGhlIGxvd2VzdCBvZiAKCgo0MjAgQURZQVIgVEFMS1MgCgoKdGhlc2UgdGhyZWUgdHlwZXMsIGFuZCBldmVuIHRoYXQgaXMgdXN1YWxseSAKdmVyeSBwYXJ0aWFsLiBJdCBpcyB0aGVyZWZvcmUgb25seSBzb21lIG9mIAp0aGlzIGxvd2VzdCB0eXBlIG9mIGNhdXNhbCBtYXR0ZXIgdGhhdCBjYW4gCmJlIHB1dCBkb3duIHRvIGxvd2VyIGxldmVscywgYXVkIG9ubHkgYSAKc21hbGwgZnJhY3Rpb24gZXZlbiBvZiB0aGF0IHBhcnQgY2FuIGJlIAplbnRhbmdsZWQgd2l0aCBtZXV0YWwgYW5kIGFzdHJhbCBtYXR0ZXIuIAoKVGhlIGVnb+KAmXMgY29udHJvbCBvdmVyIHdoYXQgaXMgcHV0IGRvd24gCmlzLiB2ZXJ5IHdlYWsgYW5kIGltcGVyZmVjdCwgYmVjYXVzZSBoZSBpcyAKc3RpbGwgaGFsZiBhc2xlZXAuIEJ1dCBhcyBoaXMgLCBwaHlzaWNhbC4gYm9keSAKdnJvd3MgLXVwIGhpcyBhc3RyYWwgYW5kIG1lbnRhbCBib2RpZXMgYXJlIAphbHN2IGRldmVsb3BlZCwgYW5kIHRoZSBjYXVzYWwgbWF0dGVyIGVudGFuZ2wtIApjZCB3aXRoIHRoZW0gaXMgYXdha2VuZWQgYnkgdGhlIHZpZ29yb3VzIAp2aWJyYXRpb25zIHdoaWNoIHJlYWNoIGl0IHRocm91Z2ggdGhlbi4gClRoaXMgZnJhY3Rpb24gb2YgYSBmcmFjdGlvbiB3aGljaCBpcyBmdWxseSAKZW50YW5nbGVkIGdpdmVzIGxpZmUgYW5kIHZpZ291ciBhbmQgYSBzZW5zZSAKb2YgaW5kaXZpZHVhbGl0eSB0byB0aGVzZSB2ZWhpY2xlcywgYW5kIHRoZXkgCmluIHR1cm4gcmVhY3Qgc3Ryb25nbHkgdXBvbiBpdCBhbmQgYXJvdXNlIGl0IAp0byBhIGtlZW4gcmVhbGlzYXRpb24gb2YgbGlmZS4gVGhpcyBrZWVuIApyZWFsaXNhdGlvbiBvZiBsaWZlIGlzIGV4YWN0bHkgd2hhdCBpdCBuZWVkcywgCnRoZSB2ZXJ5IG9iamVjdCBmb3Igd2hpY2ggaXQgaXMgcHV0IGRvd247IAphbmQgaXQgaXMgdGhlIGxvbmdpbmcgZm9yIHRoaXMga2VlbiByZWFsaXNhLSAKdGlvbiB3aGVuIGl0IGhhcyBpdCBub3Qgd2hpY2ggaXMgc3Bva2VuIApvZiBhcyB0cmlzaHVkICh0aGUgdGhpcnN0IGZvciBtYW5pZmVzdGVkIGxpZmUsIAp0aGUgZGVzaXJlIHRvIGZlZWwgb25lc2VsZiByZWFsbHkgdml2aWRseSAKbGl2ZSksIHRoZSB0b3JjZSB3aGljaCBkcmF3cyB0aGUgZWdvIGRvd24gCmF2YWluIGludG8gcmVpbWNhcm5hdGlvbi4gCgpCdXQg4oCYanVzdCBiZWNhdXNlIHRoaXMgc21hbGwgZnJhY3Rpb24gaGFzIApoYWQgdGhlc2UgZXhwZXJpZW5jZXMsIGFuZCBpcyB0aGVyZWZvcmUgc2UgCgoKTE9TVCBTT1VMUyA0MjEgCgoKbXVjaCBtb3JlIGF3YWtlIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGVnbywgCml0IG1heSBvZnRlbiBiZSBzbyBmYXIgaW50ZW5zaWZpZWQgYXMgdG8gdGhpbmsgCml0c2VsZiB0aGUgd2hvbGUsIGFuZCBmb3JnZXQgZm9yIHRoZSB0aW1lIGl0cyAKcmVsYXRpb24gdG8g4oCcIGl0cyBGYXRoZXIgd2hpY2ggaXMgaW4gaGVhdmVuLuKAnSAKaXQgbWF5IHRlbXBvcmFyaWx5IGlkZW50aWZ5IGl0c2VsZiB3aXRoIHRoZSAKbWF0dGVyIHRocm91Z2ggd2hpY2ggaXQgc2hvdWxkIGJlIHdvcmtpbmcsIAphbmQgbWF5IHJlc2lzdCB0aGUgaW5mbHVlbmNlIG9mIHRoYXQgb3RoZXIgCnBvcnRpb24gd2hpY2ggaGFzIGJlZW4gcHV0IGRvd24sIGJ1dCBpcyBub3QgCmVhdGFuZ2xlZOKAlHRoYXQgd2hpY2ggZm9ybXMgdGhlIGxpbmsgd2l0aCAKdGhlIGdyZWF0IG1hc3Mgb2YgdGhlIGVnbyBvbiBsdXMgb3duIHBsYW5lLiAKCkp1IG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhpcyBtYXR0ZXIgZnVsbHkgCndlIGl1c3QgdGhpbmsgb2YgdGhhdCBwb3J0aW9uIG9mIHRoZSBlZ28gCndoaWNoIGlzIGF3YWtlbmVkIG9uIHRoZSB0aGlyZCBzdWItcGxhbmUgb2YgCnRoZSBtZW50YWwgKHJlbWVtYmVyaW5nIGFsd2F5cyBob3cgc2ltYWxsIAp3IGZyYWN0aW9uIGV2ZW4gdGhhdCBpcyBvZiB0aGUgd2hvbGUpIGFzIGl0c2VsZiAKZGl2aWRlZCBpbnRvIHRocmVlIHBhcnRzOiAodXcpIHRoYXQgd2hpY2ggCnJlbWFpbnMgb24gaXRzIG93biBwbGFuZTsgKCkgdGhhdCB3aGljaCBpcyAKcHV0IGRvd24sIGJ1dCByZW1haW5zIHVuZW50YW5nbGVkIGltIGxvd2VyIAptYXR0ZXI7IGFuZCAowqIpIHRoYXQgd2hpY2ggaXMgdGhvcm91Z2hseSAKZXV0YW5nbGVkIHdpdGggbG93ZXIgbWF0dGVyIGFuZCByZWNlaXZlcyAKdmlicmF0aW9ucyBmcm9tIGl0LiBUaGVzZSBhcmUgYXJyYW5nZWQgaW4gYSAKZGVzY2VuZGluZyBzY2FsZSwgZm9yIGp1c3QgYXMgKEApIDFzIGEgdmVyeSAKc21hbGwgcGFydCBvZiB0aGUgcmVhbCBlZ28sIHNvICg2KSAxcyBidXQgYSAKc21hbGwgcGFydCBvZiAoYSksIGFuZCAowqIpIGluIHR1cm4gYSBzbWFsbCAKcGFydCBvZiAoSikuIFRoZSBzZWNvbmQgYWN0cyBhcyBhIGxpbmsgYmUtIAp0d2VlbiB0aGUgZmlyc3QgYW5kIHRoaXJkOyB3ZSBtYXkgc3ltYm9saXNlIAooNCkgYXMgdGhlIGJvZHksIChiKSBhcyB0aGUgYXJtIHN0cmV0Y2hlZCAKb3V0LCBhbmQgKGMpIGFzIHRoZSBoYW5kIHdoaWNoIGdyYXNwcywgb3IgCgoKNDIyIEFEWUFSIFRBTEtTIAoKCnBlcmhhcHMgcmF0aGVyIHRoZSB0aXBzIG9mIHRoZSBmaW5nZXJzIHdoaWNoIAphcmUgZGlwcGVkIGludG8gbWF0dGVyLiB8IApXZSBoYXZlIGhlcmUgYSB2ZXJ5IGRlbGljYXRlbHkgYmFsYW5jZWQgCmFycmFuZ2VtZW50LCB3aGljaCBtYXkgYmUgYWZmZWN0ZWQgaW0gCnZhcmlvdXMgd2F5cy4g4oCYVGhlIGludGVudGlvbiBpcyB0aGF0IHRoZSBoYW5kIAooZWMpIHNob3VsZCBncmFzcCBmaXJtbHkgYW5kIGd1aWRlIHRoZSBtYXR0ZXIgCndpdGggd2hpY2ggaXQgaXMgY3V0YW5nbGVkLCBiZWluZyBmdWxseSAKZGlyZWN0ZWQgYWxsIHRoZSB0aW1lIGJ5IHRoZSBib2R5ICjCqykgdGhyb3VnaCAKdGhlIGFybSAoYikuIFVuZGVyIGZhdm91cmFibHkgY3VyZXVtc3RhbmNlcyAKYWRkaXRpb25hbCBzdHJlbmd0aCwgYW5kIGV2ZW4gYWRkaXRpb25hbCAKbWF0dGVyLCBtYXkgYmUgcG91cmVkIGZyb20gKGEpIHRocm91Z2ggCihiKSBpbnRvICjCoiksIHNvIHRoYXQgdGhlIGNvbnRyb2wgbWF5IGJlY29tZSAKbW9yZSBhbmQgbW9yZSBwZXJmZWN0LiAowqIpIG1heSBncm93IGluIApzaXplIGFzIHdlbGwgYXMgaW4gc3RyZW5ndGgsIGFuZCB0aGUgbW9yZSBpdCAKZG9lcyBzbyB0aGUgYmV0dGVyLCBzbyBsb25nIGFzIHRoZSBjb21tdW5pLSAKY2F0aW9uIHRocm91Z2ggKGQpIGlzIGtlcHQgb3BlbiBmcmVlbHkgYW5kIAoodykgcmV0YWlucyBjb250cm9dLiBGb3IgdGhlIHZlcnkgZW50YW5nbGUtIAptZW50IG9mIHRoZSBjYXVzYWwgbWF0dGVyIHdoaWNoIGNvbnN0aXR1dGVzIAooYykgYXdha2VucyBpdCB0byBhIGtlZW4gYWN0aXZpdHkgYW5kIGFuIAphY2N1cmFjeSBvZiByZXNwb25zZSB0byBmaW5lIHNoYWRlcyBvZiB2aWJyYS0gCnRpb24gd2hpY2ggaXQgY291bGQgZ2FpbiBpbiBubyBvdGhlcjogd2F5LCAKYW5kIHRoaXMsIHdoZW4gdHJhbnNtaXR0ZWQgdGhyb3VnaCAoYikgdG8gCih2NyksIG1lYW5zIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgZWdvIApoaW12eWVsZi4gLCAKVW50b3J0dW5hdGVseSB0aGUgY291cnNlIG9mIGV2ZW50cyBkb3ZlcyAKbm90IGFsd2F5cyBmb2xsb3cgdGhlIGlkZWFsIHBsYW4gb2Ygd29ya2luZyAKYWJvdmUgaW5kaWNhdGVkLiBXaGVuIHRoZSBjb250cm9sIG9mIChhKSBpcyAKZmVlYmxlLCBpdCBzb21ldGltZXMgaGFwcGVucyB0aGF0ICjCoikgYmVjb21lcyAKCgpMT1NUIFNPVUxTIDQyMyAKCgpzbyB0aG9yb3VnaGx5IGltbWVzaGVkIGluIGxvd2VyIG1hdHRlciB0aGF0IAooYXMgSSBoYXZlIHNhaWQpIGl0IGFldHVhbGx5IGlkZW50aWZpZXMgaXRzZWxmIAp3aXRoIC5pdCwgZm9yZ2V0cyBmb3IgdGhlIHRpbWUgaXRzIGhpZ2ggCmVzdGF0ZSwgYW5kIHRoaW5rcyBvZiBpdHNlbGYgYXMgdGhlIHdob2xlIAplZ28uOiBJZiDigJh0aGUgbWF0dGVyIGJlIG9mIHRoZSBsb3dlciAKbWVudGFsIHBsYW5lLCB3ZSBzaGFsbCB0aGVuIGhhdmUgZG93biAKaGVyZSDigJhvbiB0aGUgcGh5c2ljYWwgcGxhbmUgYT0gbWFuIAp3aG8g4oCYaXMgd2hvbGx5IG1hdGVyaWFsaXN0aWMuIEhlIG1heSAuIGJlIAprZWVubHkgLmludGVsbGVjdHVhbCBwZXJoYXBzLCBidXQgbm90IHNwaXJpdHVhbCA7IApoZSBtYXkgdmVyeSDigJhsaWtlbHkgYmUgaW50b2xlcmFudCBvZiBzcGlyaXQtIAp1YWxpdHkgYW5kIHF1aXRlIHVuYWJsZSB0byBjb21wcmVoZW5kIG9yIAphcHByZWNpYXRlIGl0LiBIZSBtYXkgcHJvYmFibHkgY2FsbCBoaW1zZWxmIApwcmFjdGljYWwsIG1hdHRlci1vZi1mYWN0LCB1bnNlbnRpbWVudGFsLCB3aGlsZSAKaW4gcmVhbGl0eSBoZSBpcyBoYXJkIGFzIHRoZSBuZXRoZXIgbWlsbC0gCnN0b25lLCBhbmQgYmVjYXVzZSBvZiB0aGF0IGhhcmRuZXNzIGhpcyBsaWZlIAppcyBhIGZhaWx1cmUsIGFuZCBoZSBpcyBtYWtpbmcgbm8gcHJvZ3Jlc3MuIAoKSWYgdGhlIG1hdHRlciBpbiB3aGljaCBoZSBpcyBzbyBmYXRhbGx5IAplbnRhbmdsZWQgYmUgYXN0cmFsLCBoZSB3aWxsIGJlIChvbiB0aGUgCnBoeXNpY2FsIHBsYW5lKSBvbmUgd2hvIHRoaW5rcyBvbmx5IG9mIGhpcyAKb3duIGdyYXRpZmljYXRpb24sIHdobyBpcyBhYnNvbHV0ZWx5IHJ1dGhsZXNzIAp3aGVuIGluIHB1cnN3dCBvZiBzb21lIG9iamVjdC4gd2hpY2ggaGUgCnN0cm9uZ2x5IGRlc2lyZXMsIGFAIG1hbiB1dHRlcmx5IHVucHJpbmNpcGxlZCAKYW5kIG9mIGJydXRhbCBzZWxmaXNobmVzcy4gU3VjaCBhIG1hbiBsaXZlcyAKaW4gaGlzIHBhc3Npb25zLCBqdXN0IGFzIHRoZSBtYW4gaW1tZXNoZWQgaW4gCm1lbnRhbCBtYXR0ZXIgbGl2ZXMgaW4gaGlzIG1pbmQuIENhc2VzIHN1Y2ggCmFzIHRoZXNlIGhhdmUgYmVlbiBzcG9rZW4gb2YgaW4gb3VyIGxpdGVyYS0gCnR1cmUgYXMg4oCYbG9zdCBzb3VscywgdGhvdWdoIG5vdCBpcnJldHJpZXYtIAphYmx5IGxvc3QuIE1hZGFtZSBCbGF2YXRza3kgc2F5cyBvZiB0aGVtOiAKCgpBNDI0LCBBRFlBUiBUQUxLUyAKCgrigJxUaGVyZSBpcywgaG93ZXZlciwgc3RpbGwgaG9wZSBmb3IgYSAKcGVyc29uIHdobyBoYXMgbG9zdCBoaXMgSGlnaGVyIFNvdWwgdGhyb3VnaCAKaGlzIHZpY2VzLCB3aGlsZSBoZSBpcyB5ZXQgaW4gdGhlIGJvZHkuIEhlIAptYXkgc3RpbGwgYmUgcmVkZWVtZWQgYW5kIG1hZGUgdG8gdHVybiAKb24gaGlzIG1hdGVyaWFsIG5hdHVyZS4gRm9yIGVpdGhlciBhbiBpbi0gCnRlbnNlIGZlZWxpbmcgb2YgcmVwZW50YW5jZSwgb3Igb25lIHNpbmdsZSAKZWFybmVzdC4gYXBwZWFsIHRvIHRoZSBFZ28gdGhhdCBoYXMgZmxlZCwgb3IgCmhlc3Qgb2YgYWxsLCBhbiBhY3RpdmUgZWZmb3J0IHRvIGFtZW5kIG9uZeKAmXMgCndheXMsIG1heSBicmluZyB0aGUgSGlnaGVyIEVnbyBiYWNrIAphZ2Fpbi4g4oCYVGhlIHRocmVhZCBvZiBjb25uZWN0aW9uIGlzIG5vdCBhbC0gCnRvZ2V0aGVyIGJyb2tlbi7igJ0gKFNlY3JldCBEb2N0cmluZSwgaW4uIDUyNykuIAoKVGhlc2UgYXJlIGNhc2VzIGluIHdoaWNoIChjKSBoYXMgYXNzZXJ0ZWQgaXQtIApzZWxmIGFnYWluc3QgKCkpLCBhbmQgcHJlc3NlZCBpdCBiYWNrIHRvd2FyZHMgKMKrKSA7IAp0aGUgYXJtIGhhcyBiZWNvbWUgYXR0ZW51YXRlZCBhbmQgYWxtb3N0IApwYXJhbHlzZWQsIGl0cyBzdHJlbmd0aCBhbmQgc3Vic3RhbmNlIGJlaW5nIAp3aXRoZHJhd24gaW50byB0aGUgYm9keSwgd2hpbGUgdGhlIGhhbmQgCmhhcyBzZXQgdXAgZm9yIGl0c2VsZiwgYW5kIG1ha2VzIG9uIGl0cyBvd24gCmFjY291bnQgamVya3kgYW5kIHNwYXNtb2RpYyBtb3ZlbWVudHMgCndoaWNoIGFyZSBub3QgY29udHJvbGxlZCBieSB0aGUgYnJhaW4uIElmIAp0aGUgc2VwYXJhdGlvbiBjb3VsZCBiZWNvbWUgcGVyZmVjdCBpdHwgd291bGQgCmNvcnJlc3BvbmQgdG8gYW4gYW1wdXRhdGlvbiBhdCB0aGUgd3Jpc3QsIApidXQgdGhpcyB2ZXJ5IHJhcmVseSB0YWtlcyBwbGFjZSBkdXJpbmcgCnBoeXNpY2FsIGV4aXN0ZW5jZSwgdGhvdWdoIG9ubHkgc28gbXVjaCBvZiAKY29tbXVuaWNhdGlvbiByZW1haW5zIGFzIGlzIG5lY2Vzc2FyeSB0byAKa2VlcCB0aGUgcGVyc29uYWxpdHkgYWxpdmUuIAoKQXMgTWFkYW1lIEJsYXZhdHNreSBzYXlzLCBzdWNoIGEgY2FzZSAKaXMgbm90IGVudGlyZWx5IGhvcGVsZXNzLCBmb3IgZXZlbiBhdCB0aGUgbGFzdC4gCm1vbWVudCBmcmVzaCBsaWZlIG1heSBiZSBwb3VyZWQgdGhyb3VnaCAKCgpMT1NUIFNPVUxTIOKAlCA0QVE1IAoKCnRoYXQgcGFyYWx5c2VkIGFybSBpZiBhIHN1ZmZpY2llbnRseSBzdHJvbmcgCmVmZm9ydCBiZSBtYWRlLCBhbmQgdGh1cyB0aGUgZWdvIG1heSBiZSAKZW5hYmxlZCB0byByZWNvdmVyIHNvbWUgcHJvcG9ydGlvbiBvZiAoKyksIAphcyBoZSBoYXMgYWxyZWFkeSByZWNvdmVyZWQgbW9zdCBvZiAoNikuIAoqTmV2ZXJ0aGVsZXNzLCBzdWNoIGEgbGlmZSBoYXMgYmVlbiB3YXN0ZWQsIApmb3IgZXZlbiBpZiB0aGUgbWFuIGp1c3QgY29udHJpdmVzIHRvIGVzY2FwZSAKc2VyaW91cyBsb3NzLCBhdCBhbnkgcmF0ZSBub3RoaW5nIGhhcyBiZWVuIApnYWluZWQsIGFuZCBtdWNoIHRpbWUgaGFzIGJlZW4gZnJpdHRlcmVkIAphd2F5LiAtICwgCgpUdCBtYXkgd2VsbCDigJhiZSB0aG91Z2h0IGluY3JlZGlibGUgdGhhdCAKc3VjaCBtZW4gYXMgfCBoYXZlIGRlc2NyaWJlZCBjb3VsZCBpbiAKYW55IGNhc2UgZXNjYXBlIHNlcmlvdXMgbG9zczsgYnV0LCBmb3J0dW5hdGVseSAKZm9yIG91ciBwb3NzaWJpbGl0aWVzIG9mIHByb2dyZXNzLCB0aGUgbGF3cyAKdW5kZXIgd2hpY2ggd2UgbGl2ZSBhcmUgc3VjaCB0aGF0IHRvIGFjaGlldmUgCmEgcmVhbGx5IHNlcmlvdXMgbG9zcyBpcyBubyBlYXN5IG1hdHRlci4gClRoZSByZWFzb24gZm9yIHRoYXQgbWF5IHBlcmhhcHMgYmUgbWFkZSAKY2xlYXIgYnkgdGhlIGZvbGxvd2luZyBHb3VzaWRlcmF0aW9ucy4gCgpBbGwgdGhlIGFjdGl2aXRpZXMgdGhhdCB3ZSBjYWxsIGV2aWwsIHdoZS0gCnRoZXIgdGhleSBhcmUgd29ya2luZyBhcy4gc2VsZmlzaCB0aG91Z2h0cyAKb24gdGhlIG1lbnRhbCBwbGFuZSBvciBhcyBzZWxmaXNoIGVtb3Rpb25zIApvbiB0aGUgYXN0cmFsIHBsYW5lLCBpbnZhbmFibHkgc2hvdyB0aGVtLSAKc2VsdmVzIGFzIHZpYnJhdGlvbnMgb2YgdGhlIGNvYXJzZXIgbWF0dGVyIApvZiB0aG9zZSBwbGFuZXMsIGJlbG9uZ2luZyB0byB0aGVpciBsb3dlciAKbGV2ZWxzLiBPbiB0aGUgb3RoZXIgaGFuZCwgZXZlcnkgZ29vZCBhbmQgCnVuc2VsZmlzaCB0aG91Z2h0IG9yIGVtb3Rpb24gc2V0cyBpbSBfIHZpYnJhLSAKdGlvbiBzb21lIG9mIHRoZSBoaWdoZXIgdHlwZXMgb2YgbWF0dGVyIG9uIAppdHMgcGxhbmU7IGFuZCBiZWNhdXNlIHRoYXQgZmluZXIgbWF0dGVyIGlzIAoKCmZhciBtb3JlIGVhc2lseSBtb3ZlZCwgYW55IGdpdmVuIGFtb3VudCAKNTQgCgoKNDI2IEFEWUFSIFRBTEtTIAoKCm9mIGZvcmNlIHNwZW50IGluIGdvb2QgdGhvdWdodCBvciBmZWVsaW5nIApwcm9kdWNlcyBwZXJoYXBzIGEgaHVuZHJlZCB0aW1lcyBhcyBtdWNoIApyZXN1bHQgYXMgcHJlY2lzZWx5IHRoZSBzYW1lIGFtb3VudCBvZiBmb3JjZSAKc2VudCBvdXQpIGludG8gdGhlIGNvYXJzZXIgbWF0dGVyLiBJZiB0aGlzIAoKCndlcmUgbm90IHNvLCBpdCBpcyBvYnZpb3VzIHRoYXQgdGhlIG9yZGluYXJ54oCZIAoKCm1hbiBjb3VsZCBuZXZlciBtYWtlIGFueSBwcm9ncmVzcy5hdCBhbGwuIAoKV2Ugc2hhbGwgcHJvYmFibHkgZG8gdGhlIHF1aXRlIHVuZGV2ZWxvcC0gCmVkIG1hbiBvZiB0aGUgd29ybGQgbm8gaW5qdXN0aWNlIGlmIHdlIAphc3N1bWUgdGhhdCBuaW5ldHkgcGVyIGNlbnQgb2YgaGlzIHRob3VnaHQgYW5kIApmZWVsaW5nIGlzIHNlbGYtY2VudHJlZCwgZXZlbiBpZiBub3QgYWN0dWFsbHkgCnNlbGZpc2g7IGlmIHRlbiBwZXIgY2VudCBvZiBpdCAxcyBzcGlyaXR1YWwgYW5kIAp1bnNlbGZpc2gsIGhlIG11c3QgYWxyZWFkeSBiZSByaXNpbmcgc29tZS0gCndoYXQgYWJvdmUgdGhlIGF2ZXJhZ2UuIENsZWFybHkgaWYgdGhlc2UgCnByb3BvcnRpb25zIHByb2R1Y2VkIGNvcnJlc3BvbmRpbmcgcmVzdWx0cywgCnRoZSB2YXN0IG1ham9yaXR5IG9mIGh1bWFuaXR5IHdvdWxkIHRha2UgCm5pbmUgc3RlcHMgYmFja3dhcmRzIGZvciBldmVyeSBvbmUgZm9yd2FyZHMsIAphbmQgd2Ugc2hvdWxkIGhhdmUgYSByZXRyb2dyZXNzaW9uIHNvIHJhcGlkIAp0aGF0IGEgZmV3IGluY2FybmF0aW9ucyB3b3VsZCBkZXBvc2l0IHVzIGluIAp0aGUgYW5pbWFsIGtpbmdkb20gb3V0IG9mIHdoaWNoIHdlIGV2b2x2ZWQuIApIYXBwaWx5IGZvciB1cyB0aGUgZWZmZWN0IG9mIHRlbiBwZXIgY2VudCBvZiAKZm9yY2UgZGlyZWN0ZWQgdG8gZ29vZCBlbmRzIGVub3Jtb3VzbHkgb3V0LSAKd2VpZ2hzIHRoYXQgb2YgbmluZXR5IHBlciBjZW50IGRldm90ZWQgdG8gCnNlbGZpc2ggcHVycG9zZXMsIGFuZCBzbyBvbiB0aGUgd2hvbGUgc3VjaCBhIAptYW4gbWFrZXMgYW4gYXBwcmVjaWFibGUgYWR2YW5jZSBmcm9tIApsaWZlIHRvIGxpZmUuIEEgbWFuIHdobyBoYXMgZXZlbiBvbmUgcGVyIApjZW50IG9mIGdvb2QgdG8gc2hvdyBtYWtlcyBhIHNsaWdodCBhZC0gCnZhbmNlLCBzbyBpZiB3aWxsIGJlIHJlYWRpbHkgdW5kZXJzdG9vZCB0aGF0IAphIG1hbiB3aG9zZSBhY2NvdW50IGJhbGFuY2VzIGV4YWN0bHksIHNvIAoKCkxvc3QgU09VTFMuIDQyMzcgCgoKdGhhdCB0aGVyZSBpcyBuZWl0aGVyIGFkdmFuY2Ugbm9yIHJldHJvZ3Jlc3MtIAppb24sIG11c3QgaGF2ZSBiZWVuIGxpdmluZyDCq2EgXyBkaXN0aW5jdGx5IApldmlsLiBsaWZlOyB3aGlsZSB0byBvYnRhaW4gYW4gYWN0dWFsIGRlc2NlbnQgCmluIGV2b2x1dGlvbiBhIHBlcnNvbiBtdXN0IGJlIGFuIHVudXN1YWxseSAKY29uc2lzdGVudCB2aWxsYWluLiAsIApUaGFua3MgdG8gdGhpcyBiZW5lZmljZW50IGxhdyB0aGUgd29ybGQgCmlzIHN0ZWFkaWx5IGJ1dCBzbG93bHkgZXZvbHZpbmcsIGV2ZW4gdGhvdWdoIAp3ZSBzZWUgcm91bmQgdXMgYWxsIHRoZSB3aGlsZSBzbyBtdWNoIAp0aGF0IGlzLnVuZGVzaXJhYmxlOyBhbmQgZXZlbiBzdWNoIG1lbiBhcyAKSSBoYXZlIGRlc2NyaWJlZCBtYXkgbm90IGFmdGVyIGFsbCBmYWxsIAp2ZXJ5IGZhci4gV2hhdCB0aGV5IGhhdmUgbG9zdCBpcyByYXRoZXIgCnRpbWUgYW5kIG9wcG9ydHVuaXR5IHRoYW4gYWN0dWFsIHBvc2l0aW9uIAptIGV2b2x1dGlvbjsgYnV0IHRvIGxvc2UgdGltZSBhbmQgb3AtIApwb3J0dW5pdHkgbWVhbnMgYWx3YXlzIGFkZGl0aW9uYWwgc3VmZmVyaW5nLiAKVG8gc2VlIHdoYXQgdGhleSBoYXZlIGxvc3QgYW5kIHdoYXQgCnRoZXkgaGF2ZSBmYWlsZWQgdG8gZG8sIGxldCB1cyByZXZlcnQgZm9yIAphdyBtb21lbnQgdG8gdGhlIGFuYWxvZ3kgb2YgbXZlc3RtZW50LiAKVGhlIGVnbyBleHBlY3RzIHRvIHJlY292ZXIgdGhhdCB3aGljaCBoZSAKcHV0cyBvdXQgdG8gaW10ZXJlc3QgaW4gbG93ZXIgbWF0dGVy4oCUdGhlIApibG9jayB0aGF0IHdlIGhhdmUgY2FsbGVkIChjKeKAlGFuZCBoZSBleC0gCnBlY3RzIGl0IHRvIGJlIGltcHJvdmVkIGJvdGggaW4gcXVhbGl0eSAKYW5kIHF1YW50aXR5LiBJdHMgcXVhbGl0eSBpcyBiZXR0ZXIgYmVjYXVzZSAKaXQgaGFzIGJlY29tZSBtdWNoIG1vcmUgYXdha2UsIGFuZCAKY2FwYWJsZSBvZiBpbnN0YW50IGFuZCBhY2N1cmF0ZSByZXNwb25zZSB0byAKdXcgZmFyIG1vcmUgdmFyaWVkIGdhbXV0IG9mIHZpYnJhdGlvbnMgdGhhbiAKYmVmb3Jl4oCUYSBjYXBhY2l0eSB3aGljaCAoYykgd2hlbiByZWFic29yYi0gCmVkIG5lY2Vzc2FyaWx5IGNvbW11bmljYXRlcyB0byAoYSksIHRob3VnaCAKb2YgY291cnNlIHRoZSBzdG9yZSBvZiBlbmVyZ3kgd2hpY2ggbWFkZSAKCgo0MjggQURZQVIgVEFMS1MgCgoKc3VjaCBhIHBvd2VyZnVsIHdhdmUgaW4gKGMpIGNyZWF0ZXMgb25seSAKYSByaXBwbGUgd2hlbiBkaXN0cmlidXRlZCB0aHJvdWdob3V0IHRoZSAKdGhlIHN1YnN0YW5jZSBvZiAoYSksIChJdCBzaG91bGQgYmUgbm90ZWQgCmhlcmUgdGhhdCBhbHRob3VnaCB0aGUgdmVoaWNsZXMsIGNvbnRhaW5pbmcgCmFzIHRoZXkgZG8gdGhlIGdyb3NzZXIgYXMgd2VsbCBhcyB0aGUgZmluZXIgCnR5cGVzIG9mIHRoZSBtYXR0ZXIgb2YgdGhlaXIgcmVzcGVjdGl2ZSAKcGxhbmVzLCBjYW4gcmVzcG9uZCB0byBhbmQgZXhwcmVzcyBldmlsIAp0aG91Z2h0cyBhbmQgZW1vdGlvbnMsIGFuZCBhbHRob3VnaCB+IHRoZWlyIApleGNpdGVtZW50IHVuZGVyIHN1Y2ggdmlicmF0aW9ucyBjYW4gcHJvZHVjZSAKcGVydHVyYmF0aW9uIGluIHRoZSBlbnRhbmdsZWQgY2F1c2FsIG1hdHRlciAKKGMpLCBJdCBpcyBxdWl0ZSBpbXBvc3NpYmxlIGZvciB0aGF0IG1hdHRlciAKKDopIHRvIHJlcHJvZHVjZSB0aG9zZSB2aWJyYXRpb25zIG9yIHRvIApjb21tdW5pY2F0ZSB0aGVtIHRvICjCqykgb3IgKGIpLCBzaW1wbHkgCmJlY2F1c2UgbWF0dGVyIG9mIHRoZSB0aHJlZSBoaWdoZXIgbWVuLSAKdGFsIEpldmVscyBjYW4gbm8gbW9yZSB2aWJyYXRlIGF0IHRoZSByYXRlIApvZiB0aGUgbG93ZXN0IHBsYW5lIHRoYW4gdGhlIHN0cmluZyBvZiBhIAp2aW9saW4gdHVuZWQgdG8gYSBjZXJ0YWluIHBpdGNoIGNhbiBiZSAKbWFkZSB0byBwcm9kdWNlIGEgbm90ZSBsb3dlciB0aGFuIHRoYXQgCnBpdGNoLiApIAoKKGMpIHNob3VsZCBhbHNvIGJlIGluY3JlYXNlZCBpbiBxdWFudGl0eSwgCmJlY2F1c2UgdGhlIGNhdXNhbCBib2R5LCBsaWtlIGFsbCBvdGhlciB2ZS0gCmhpY2xlcywgMXMgY29uc3RhbnRseSBjaGFuZ2luZyBpdHMgbWF0dGVyLCAKYXVkIHdoZW4gc3BlY2lhbCBleGVyY2lzZSBpcyBnaXZlbiB0byBhIApjZXJ0YWluIHBhcnQgb2YgaXQsIHRoYXQgcGFydCBncm93cyBpbiBzaXplIAphbmQgYmVjb21lcyBzdHJvbmdlciwgcHJlY2lzZWx5IGFzIGEgcGh5c2ljYWwgCm11c2NsZSBkb2VzIHdoZW4gaXQgaXMgdXNlZC4gS3ZlcnkgZWFydGgtIApoZmUgaXMgYW4gb3Bwb3J0dW5pdHkgY2FyZWZ1bGx5IGNhbGN1bGF0ZWQgZm9yIApzdWNoIGRldmVsb3BtZW50IGluIHF1YWxpdHkgYW5kIHF1YW50aXR5IAoKCkxPU1QgU09VTFMgNDI5IAoKCndzIDE4IG1vc3QgbmVlZGVkIGJ5IHRoZSBlZ287IGEgZmFpbHVyZSAKdG8gdXNlIHRoYXQgb3Bwb3J0dW5pdHkgbWVhbnMgdGhlIHRyb3VibGUgCmFuZCBkZWxheSBvZiBhbm90aGVyIHNpbWlsYXIgaW5jYXJuYXRpb24sIAppdHMgc3VmZmVyaW5ncyBwcm9iYWJseSBhZ2dyYXZhdGVkIGJ5IHRoZSAKYWRkaXRpb25hbCBiYWQga2FybWEgaW5jdXJyZWQuIAoKQWdhaW5zdCB0aGUgaW5jcmVtZW50IHdoaWNoIHRoZSBjZ28gaGFzIArCq3cgcmlnaHQgdG8gZXhwZWN0IGZyb20gZWFjaCBpbmNhcm5hdGlvbiB3ZSAKbXVzdOKAmSBvZmZzZXTigJkgYSBjZXJ0YWluIGFtb3VudCBvZiBsb3NzIHdoaWNoIAppbiB0aGUgZWFybGllciBzdGFnZXMgaXMgc2NhcmNlbHkgYXZvaWRhYmxlLiAKSXUgb3JkZXIgdG/igJkgYmUgZWZmZWN0aXZlIHRoZSBlbnRhbmdsZW1lbnQgCndpdGggbG93ZXIgbWF0dGVyIG11c3QgYmUgdmVyeSBpbnRpbWF0ZSwgCmFuZCBpdCBpcyBmb3VuZCB0aGF0IHdoZW4gdGhhdCBpcyBzbywgaXQgaXMgCnNjYXJjZWx5IGV2ZXIgcG9zc2libGUgdG8gcmVjb3ZlciBldmVyeSBwYXJ0aS0gCmNsZSwgZXNwZWNpYWxseSBmcm9tIHRoZSBjb25uZWN0aW9uIHdpdGggCnRoZSBhc3RyYWwgdmVoaWNsZS4gV2hlbiB0aGUgdGltZSBjb21lcyAKZm9yIHNlcGFyYXRpb24gZnJvbSB0aGF0LCBpdCAxOCBhbG1vc3QgYWx3YXlzIAphIHNoYWRlIGFuZCB1b3QgYSBtZXJlIHNoZWxsIHRoYXQgaXMgbGVmdCAKYmVoaW5kIG9uIHRoZSBhc3RyYWwgcGxhdWU7IGFuZCB0aGF0IHZlcnkgCmRpc3RpbmN0aW9uIG1lYW5zIHRoYXQgc29tZXRoaW5nIG9mIHRoZSAKY2F1c2FsIG1hdGVyaWFsIGlzIGxvc3QuIEh4Y2VwdCBpbiB0aGUgY2FzZSAKb2YgYW4gdW51c3VhbGx5IGJhZCBsaWZlLCBob3dldmVyLCB0aGlzIAphbW91bnQgc2hvdWxkIGJlIG11Y2ggc21hbGxlciB0aGFuIHRoYXQgCmdhaW5lZCBieSBncm93dGgsIGFuZCBzbyB0aGVyZSBzaG91bGQgYmUgCm9uIHRoZSB3aG9sZSBhIHByb2ZpdCBvbiB0aGUgdHJhbnNhY3Rpb24uIApXaXRoIHN1Y2ggbWVuIGFzIFsgaGF2ZSBkZXNjcmliZWTigJRtZW4gCmxpdmluZyBlbnRpcmVseSBtIHRoZWlyIHBhc3Npb25zIG9yIHRoZWlyIAppbm1kc+KAlHRoZXJlIHdvdWxkIGJlIG5vIGdhaW4gZWl0aGVyIGluIApxdWFsaXR5IG9yIHF1YW50aXR5LCBzaW5jZSB0aGUgdmlicmF0aW9ucyAKCgo0MzAgQURZQVIgVEFMS1MgCgoKd291bGQgbm90IGJlIHN1Y2ggYXMgY291bGQgYmUgc3RvcmVkIGluIHRoZSAKY2F1c2FsIGJvZHk7IGFuZCBvbiB0aGUgb3RoZXIgaGFuZCwgYXMgCnRoZSBlbnRhbmdsZW1lbnQgaGFkIGJlZW4gc28gc3Ryb25nLCB0aGVyZSAKd291bGQgY2VydGFpbmx5IGJlIGNvbnNpZGVyYWJsZSBsb3NzIHdoZW4gCnRoZSBzZXBhcmF0aW9uIHRvb2sgcGxhY2UuIAoKV2UgbXVzdCBub3QgYWxsb3cgdGhlIGFuYWxvZ3kgb2YgdGhlIAphcm0gYW5kIGhhbmQgdG8gbWlzbGVhZCB1cyBpbnRvIHRoaW5raW5nIApvZiAoYikgYW5kIChjKSBhcyBwZXJtYW5lbnQgYXBwYW5hZ2VzIG9mIAp0aGUgZWdvLiBEdXJpbmcgYSBJaWZlLXBlcmlvZCB0aGV5IG1heSAKYmUgY29uc2lkZXJlZCBhcyBzZXBhcmF0ZSwgYnV0IGF0IHRoZSBlbmQgCm9mIGVhY2ggbGlmZS1wZXJpb2QgdGhleSB3aXRoZHJhdyBpbnRvICh3KSwgCmFuZCB0aGUgcmVzdWx0IG9mIHRoZWlyIGV4cGVyaWVuY2UgaXMgZGlzLSAKdHJpYnV0ZWQsIGFzIGl0IHdlcmUsIHRocm91Z2ggdGhlIHdob2xlIG9mIAppdHMgc3Vic3RhbmNlOyBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMgCmZvciB0aGF0IGV5byB0byBwdXQgcGFydCBvZiBoaW1zZWxmIG91dCAKaW50byBpbmNhcm5hdGlvbiBvbmNlIG1vcmUsIGhlIGRvZXMgbm90IApzdHJldGNoIG91dCBhZ2FpbiB0aGUgb2xkICg0KSBhbmQgKGUpLCBmb3IgCnRoZXkgaGF2ZSBiZWVuIGFic29yYmVkIGluIGhpbSBhbmQgYmVjb21lIApwYXJ0IG9mIGhpbSwganVzdCBhcyBhIGN1cGZ1bCBvZiB3YXRlciAKZW1wdGllZCBpdG8gYSBidWNrZXQgYmVjb21lcyBwYXJ0IG9mIAp0aGUgd2F0ZXIgaW0gdGhlIGJ1Y2tldCBhbmQgY2Fubm90IGJlIApzZXBhcmF0ZWQgZnJvbSBpdC4gCgpBbnkgY29sb3VybWcgbWF0dGVyIHdoaWNoIHdhcyBwcmVzZW50IAppbiB0aGUgY3VwIGlzIGRpc3RyaWJ1dGVkICh0aG91Z2ggaW0gcGFsZXIgdGludCkgCnRocm91Z2ggdGhlIHdob2xlIGJ1Y2tldGZ1bCBvZiB3YXRlcjsgYW5kIAp0aGF0IGNvbG91cm1nIG1hdHRlciBtYXkgYmUgdGFrZW4gYXMgCnN5bWJvbGlzaW5nIHRoZSBxdWFsaXRpZXMgZGV2ZWxvcGVkIGJ5IGV4LSAKcGVyaWVuY2UuIEp1c3QgYXMgaXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byAKCgpMT1NUIC1TT1VMUyA0MzEgCgoKdGFrZSBvbnQgYWdhaW4gZnJvbSB0aGUgYnVja2V0IGV4YWN0bHkgdGhlIApzYW1lIGN1cGZ1bCBvZiB3YXRlciwgc28gdGhlIGVnbyBjYW5ub3QgYWdhaW4gCnB1dCBvdXQgdGhlIHNhbWUgKGIpIGFuZCAoYykuIFRoZSBwbGFuIGlzIApvbmUgdG8gd2hpY2ggaGUgd2FzIGFjY3VzdG9tZWQgYmVmb3JlIGhlIApoZWNhbWUgYSBzZXBhcmF0ZSBlZ28gYXQgYWxsLCBmb3IgaXQgaXMgaWRlbnRpLSAKY2FsIHdpdGggdGhhdC4gcHVyc3VlZCBieSB0aGUgZ3JvdXAtc291bCwgZXgtIApjZXB0IHRoYXQgdGhlIGxhdHRlciBwdXRzIGRvd24gbWFueSB0ZW50YWNsZXMgCnNpbXVsdGFuZW91c2x5LCB3aGlsZSB0aGUgZWdvIHB1dHMgZm9ydGggb25seSAKb25lIGF0IGEgdGltZS4gVGhlcmVmb3JlIHRoZSBwZXJzb25hbGl0eSAKaW4gZWFjaCBuZXcg4oCYaW5jYXJuYXRpb24gaXMgYSBkaWZmZXJlbnQgb25lLCAKdGhvdWdoIHRoZSBlZ28gYmVoaW5kIGl0IHJlbWFpbnMgdGhlIHNhbWUuIAoKMy4gQ2FzZXMgaW4gd2hpY2ggdGhlIHBlcnNvbmFsaXR5IGNhcHR1cmVzIAp0aGUgcGFydCBvZiB0aGUgZWdvIHdoaWNoIGlzIHB1dCBkb3duLCBhbmQgCmFjdHVhbGx5IGJyZWFrcyBhd2F5LiBUaGVzZSBhcmUgXyBoYXBwaWx5IApleGNlc3NpdmVseSByYXJlLCBidXQuIHRoZXkgaGF2ZSBoYXBwZW5lZCwgYW5kIAp0aGV5IHJlcHJlc2VudCB0aGUgbW9zdCBhcHBhbGxpbmcgY2F0YXN0cm9waGUgCnRoYXQgY2FuIG9jY3VyIHRvIHRow6kgZWdvIGNvbmVlcm5lZC4gVGhpcyAKdGltZSAoYyksIGluc3RlYWQgb2YgcmVwZWxsaW5nICg2KSBhbmQgZHJpdi0gCmluZyBpdCBncmFkdWFsbHkgYmFjayBpbnRvIChhKSwgYnkgZGVncmVlcyAKYWJzb3JicyAoNikgYW5kIGRldGFjaGVzIGl0IGZyb20gKGEpLiBUaGlzIApjYW4gb25seSBiZSBhY2NvbXBsaXNoZWQgYnkgZGV0ZXJtaW5lZCBwZXItIApzaXN0ZW5jZSBpbiBkZWxpYmVyYXRlIGV2aWzigJRibGFjayBtYWdpYywgaW4gCnNob3J0LiBSZXZlcnRpbmcgdG8gb3VyIGZvcm1lciBhbmFsb2dpZXMsIAp0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYW1wdXRhdGlvbiBhdCB0aGUgCnNob3VsZGVyLCBvciB0byB0aGUgbG9zcyBieSB0aGUgZWdvIG9mIG5lYXJseSAKYWxsIGhpcyBhdmFpbGFibGUgY2FwaXRhbC4gRm9ydHVuYXRlbHkgZm9yIGhpbSAKaGUgY2Fubm90IGxvc2UgZXZlcnl0aGluZywgYmVjYXVzZSAoNikgYW5kIChjKSAKdG9nZXRoZXIgYXJlIG9ubHkgYSBzbWFsbCBwcm9wb3J0aW9uIG9mIChhKSwgCgoKNDM5IEFEWUFSIFRBTEtTIAoKCmFuZCBiZWhpbmQgKGEpIGlzIHRoZSBncmVhdCB1bmRldmVsb3BlZCAKcG9ydGlvbiBvZiB0aGUgZWdvIG9uIHRoZSBmaXJzdCBhbmQgc2Vjb25kIAptZW50YWwgc3ViLXBsYW5lcy4gTWVyY2lmdWxseSBhIG1hbiwgaG93ZXZlciAKaW5jcmVkaWJseSBmb29saXNoIG9yIHdpY2tlZCwgY2Fubm90IGNvbS0gCnBsZXRlbHkgd3JlY2sgaGltc2VsZiwgZm9yIGhlIGNhbm5vdCBicmluZyAKdGhhdCBoaWdoZXIgcGFydCBvZiB0aGUgY2F1c2FsIGJvZHkuIGludG8gCmFjdGl2aXR5IHVudGlsIGhlIGhhcyByZWFjaGVkIGEgbGV2ZWwgYXQgCndoaWNoIHN1Y2ggZXZpbCBpcyB1bnRoaW5rYWJsZS4gCgpOb3cgdGhhdCB0aGUgY2VudHJhbCBwb2ludCBvZiBvdXIgdG1tZXItIApzaW9uIGluIG1hdHRlciBpcyBwYXNzZWQsIHRoZSB3aG9sZSBmb3JjZSBvZiAKdGhlIHVuaXZlcnNlIGlzIHByZXNzaW5nIHVwd2FyZHMgdG93YXJkcyAKdW5pdHksIGFuZCB0aGUgbWFuIHdobyBpcyB3aWxsaW5nIHRvIG1ha2UgCmFsbCBoaXMgaGZlIGFuIGludGVsbGlnZW50IGNvLW9wZXJhdGlvbiB3aXRoIApuYXR1cmUgZ2FpbnMgYXMgcGFydCBvZiBoaXMgcmV3YXJkIGFuIGV2ZXItIAppbmNyZWFzaW5nIHBlcmNlcHRpb24gb2YgdGhlIHJlYWxpdHkgb2YgdGhpcyAKdW5pdHkuIEJ1dCBvbiB0aGUgb3RoZXIgaGFuZCBpdCBpcyBvYnZpb3VzIAp0aGF0IG1lbiBtYXkgc2V0IHRoZW1zZWx2ZXMgaW4gb3Bwb3NpdGlvbiAKdG8gbmF0dXJlIGFuZCwgaW5zdGVhZCBvZiB3b3JraW5nIHVuc2VsZmlzaGx5IApmb3IgdGhlIGdvb2Qgb2YgYWxsLCBtYXkgZGViYXNlIGV2ZXJ5IGZhY3VsdHkgCnRoZXkgcG9zc2VzcyBmb3IgcHVyZWx5IHNlbGZpc2ggZW5kczsgYW5kIG9mIAp0aGVtIGFsc28sIGFzIG9mIHRoZSBvdGhlcnMsIHRoZSBvbGQgc2F5aW5nIGlzIAp0cnVlLCDigJxWZXJpbHkgSSBzYXkgdW50byB5b3UsIHRoZXkgaGF2ZSB0aGVpciAKcmV3YXJkLuKAneKAmSBUaGV5IHNwZW5kIHRoZWlyIGxpdmVzIGluIHN0cml2aW5nIApmb3Igc2VwYXJhdGVuZXNzLCBhbmQgZm9yIGEgbG9uZyB0aW1lIHRoZXkgCmF0dGFpbiBpdCwgYW5kIGl0IGlzIHNhaWQgdGhhdCB0aGF0IHNlbnNhdGlvbiBvZiAKYmVpbmcgdXR0ZXJseSBhbG9uZSBpbiBzcGFjZSBpcyB0aGUgbW9zdCBhd2Z1bCAKZmF0ZSB0aGF0IGNhbiBldmVyIGJlZmFsbCB0aGUgc29ucyBvZiBtZW4uIApfICdUaGlzIGV4dHJhb3JkaW5hcnkgZGV2ZWxvcG1lbnQgb2Ygc2VsZmlzaG5lc3MgCgoKTE9TdCBTT1VMUyBBUT8gCgoKaXMgdGhlIGNoYXJhY3RlcmlzdGljIG9mIHRoZSBibGFjayBtYWdpY2lhbiwgCmFuZCBpdCAxOCBhbW9uZyB0aGVpciByYW5rcyBvbmx5IHRoYXQgbWVuIApjYW4gYmUgZm91bmQgd2hvIGFyZSBpbiBkYW5nZXIgb2YgdGhpcyAKdGVycmlibGUgZmF0ZS4gTWFueSBhbmQgbG9hdGhzb21lIGFyZSB0aGVpciAKdmFyaWV0aWVzLCBidXQgdGhleSBtYXkgYWxsIGJlIGNsYXNzZWQgPSBpbiAKb25lIG9yIG90aGVyIG9mIHR3byBncmVhdCBkaXZpc2lvbnMuIOKAmFRoZXkgCmJvdGggc2Ugc3VjaCBvY2VubHQgYXJ0cyBhcyB0aGV5IHBvc3Nlc3MgCmZvciBwdXJlbHkgc2VsZmlzaCBwdXJwb3NlcywgYnV0IHRoZXNlIHB1ci0gCnBvc2VzIGRpZmZlci4gLiAKCkluIHRoZSBjb21tb25lciBhbmQgbGVzcyBmb3JtaWRhYmxlIAp0eXBlIHRoZSBvYmplY3QgcHVyc25lZCBpcyB0aGUgZ3JhdGlmaS0gCmNhdGlvbiBvZiBzZW5zdWFsIGRlc2lyZSBvZiBzb21lIF8gc29ydCwgCmFuZCBuYXR1cmFsbHkgdGhlIHJlc3VsdCBvZiBhIGxpZmUgZGV2b3RlZCAKdG8gbm90aGluZyBidXQgdGhhdCBpcyB0byBjZW50cmUgdGhlIG1hbuKAmXMgCmVuZXJneSBpbiB0aGUgZGVzaXJlLWJvZHk7IHNvIHRoYXQgaWYgdGhlIAptYW4gd2hvIHdvcmtzIG9uIHRoZXNlIGxpbmVzIGhhcyBzdWNjZWVkLSAKZWQgaW4ga2lsbGluZyBvdXQgZnJvbSBoaW1zZWxmIGV2ZXJ5IHVuc2VsZi0gCmlzaCBvciBhZmZlY3Rpb25hdGUgZmVlbGluZywgZXZlcnkgc3Bhcmsgb2YgCmhpZ2hlciBpbXB1bHNlLCBuYXR1cmFsbHkgbm90aGluZyBpcyBsZWZ0IGJ1dCAKYSByZW1vcnNlbGVzcywgcnV0aGxlc3MgbW9uc3RlciBvZiBsdXN0LCB3aG8gCmZpbmRzIGhpbXNlbGYgYWZ0ZXIgZGVhdGggbmVpdGhlciBhYmxlIG5vciAKZGVzaXJvdXMgdG8gcmlzZSBhYm92ZSB0aGUgbG93ZXN0IOKAlCBzdWItIApkaXZpc2lvbiBvZiB0aGUgYXN0cmFsIHBsYW5lLiBUaGUgd2hvbGUgb2YgCnN1Y2ggbWluZCBhcyBoZSBoYXMgaXMgYWJzb2x1dGVseSBpbiB0aGUgCmdyaXAgb2YgZGVzaXJlLCBhbmQgd2hlbiB0aGUgwqkgc3RydWdnbGUgCnRha2VzIHBsYWNlIHRoZSBlZ28gY2FuIHJlY292ZXIgbm9uZSBvZiBpdCwgCmFuZCBmaW5kcyBoaW1zZWxmIHNlcmlvdXNseSB3ZWFrZW5lZCBpbiAKCgpjb25zZXF1ZW5jZS4gCjU1IAoKCkFCIDQuIEFEWUFSIFRBTEtTIAoKCkJ5IGhpcyBjYXJlbGVzc25lc3MgaW4gcGVybWl0dGluZyB0aGlzIGhlIApoYXMgZm9yIHRoZSB0aW1lIGN1dCBoaW1zZWxmIG9mZiBmcm9tIHRoZSAKY3VycmVudCBvZiBldm9sdXRpb24sIGZyb20gdGhlIG1pZ2h0eSB3YXZlIApvZiB0aGUgbGlmZSBvZiB0aGUgTG9jb3MsIGFuZCBzbywgdW50aWwgaGUgCmVhbiByZXR1cm4gdG8gaW5jYXJuYXRpb24sIGhlIHN0YW5kcyAod2hhdCAKYXBwZWFycyB0byBoaW0gdG8gYmUpIG91dHNpZGUgdGhhdCBsaWZlIGluIAp0aGUgY29uZGl0aW9uIG9mIGF2aWNoaSwgdGhlIHdhdmVsZXNzLiAsS3ZlbiAKd2hlbiBoZSBkb2VzIHJldHVybiB0byBpbmNhcm5hdGlvbiBpdCBjYW5ub3QgCmJlIGFtb25lIHRob3NlIHdob20gaGUgaGFzIMKra25vd24gYmVmb3JlLCAKZm9yIGhlIGhhcyBub3QgY25vdWdoIGF2YWlsYWJsZSBjYXBpdGFsIGxlZnQgCnRvIHByb3ZpZGUgZW5zb25sbWVudCBmb3IgYSBtaW5kIGFuZF8gYm9keSAKYXQgaGlzIHByZXZpb3VzIGxldmVsLiBIZSBtdXN0IG5vdyBiZSAKY29udGVudCB0byBvY2N1cHkgdmVoaWNsZXMgb2YgYSBmYXIgbGVzcyAKZXZvbHZlZCB0eXBlLCBiZWxvbmdpbmcgdG8gc29tZSBlYXJsaWVyIApyYWNlOyBzbyB0aGF0IGhlIGhhcyB0aHJvd24gaGltc2VsZiBmYXIgCmJhY2sgbW0gZXZvbHV0aW9uIGFuZCBtdXN0IGNsaW1iIG92ZXIgYWdhaW4gCm1hbnkgcnVuZ3Mgb2YgdGhlIGxhZGRlci4gCgpJdGUgd2lsbCBwcm9iYWJseSBiZSBib3JuIGFzIGEgc2F2YWdlLCAKYnV0IHdpbGwgbW9zdCBoa2VseSBiZSBhIGNoaWVmIGFtb25nIHRoZW0sIAphcyBoZSB3aWxsIHN0aWxsIGhhdmUgc29tZSBpbnRlbGxlY3QuIEl0IApoYXMgYmVlbiBzYWlkIHRoYXQgaGUgbWF5IGV2ZW4gdGhyb3cgCmhpbXNlbGYgc28gZmFyIGJhY2sgdGhhdCBoZSBtYXkgXyBiZSAKdW5hYmxlIHRvIGZpbmQgdXBvbiB0aGUgd29ybGQgaW4gaXRzIHByZXNlbnQgCmNvbmRpdGlvbiBhbnkgdHlwZSBvZiBodW1hbiBib2R5IGxvdyAKZW5vdWdoIGZvciB0aGUgbWFuaWZlc3RhdGlvbiB3aGljaCDigJhoZSBub3cgCnJlcXVpcmVzLCBzbyB0aGF0IGhlIG1heSBldmVuIGJlIGluY2FwYS0gCmNpdGF0ZWQgZnJvbSB0YWtpbmcgYW55IGZ1cnRoZXIgcGFydCBpbiAKdGhpcyBzY2hlbWUgb2YgZXZvbHV0aW9uLCBhbmQgbWF5IHRoZXJlZm9yZSAKCgpMT1NUIFNPVUxTIDQzNSAKCgpoYXZlIHRvIHdhaXQgaW0gYSBraW5kIG9mIGNvbmRpdGlvbiBvZiAKc3VzcGVuZGVkIGF1aW1hdGlvbiBmb3IgdGhlIGNvbW1lbmNlbWVudCAKb2YgYW5vdGhlci4gCgpNZWFud2hpbGUgd2hhdCBvZiB0aGUgYW1wdXRhdGVkIHBlci0gCnNvbmFsaXR5ID8gSXQgaXMgbm8gbG9uZ2VyIGEgcGVybWFuZW50IGV2b2x2LSAKaW5nIC5lbnRpdHksIGJ1dCBpdCByZW1haW5zIGZ1bGwgb2Ygdmlnb3JvdXMgCmFuZCB3aG9sbHkgZXZpbCBsaWZlLCBlbnRpcmVseSB3aXRob3V0IHJlLSAKbW9yc2Ugb3IgcmVzcG9uc2liaWxpdHkuIEFzIHRoZSBmYXRlIGJlZm9yZSAKaXQgaXPigJggZGlzaW50ZWdyYXRpb24gYW1pZHN0IHRoZSB1bnBsZWFzYW50IApzdXJyb3VuZGluZ3Mgb2Ygd2hhdCBpcyBjYWxsZWQgdGhlIOKAmGVpZ2h0aCAKc3BoZXJlLCBpdCBuYXR1cmFsbHkgdHJpZXMgdG8gbWFpbnRhaW4gc29tZSAKc29ydCBvZiBleGlzdGVuY2Ugb24gdGhlIHBoeXNpY2FsIHBsYW5lIGFzIApsb25nIGFzIHBvc3NpYmxlLiBWYW1waXJpc20gb2Ygc29tZSBraW5kIDFzIAppdHMgc29sZSBtZWFucyBvZiBwcm9sb25naW5nIGl0cyBiYW5lZnVsIGV4aXN0LSAKZW5jZSwgYW5kIHdoZW4gdGhhdCBmYWlscyBpdCBoYXMgYmVlbiBrbm93biAKdG8gc2VpemUgdXBvbiBhbnkgYXZhaWxhYmxlIGJvZHksIGRyaXZpbmcgb3V0IAp0aGUgbGF3ZnVsIG93bmVyLi0gVGhlIGJvZHkgY2hvc2VuIAptaWdodCB2ZXJ5IHByb2JhYmx5IGJlIHRoYXQgb2YgYSBjaGlsZCwgCmJvdGggYmVjYXVzZSBpdCBtaWdodCBiZSBleHBlY3RlZCB0byBsYXN0IApsb25nZXIgYW5kIGJlY2F1c2UgYW4gZWdvIHdoaWNoIGhhZCBub3QgCnlldCByZWFsbHkgdGFrZW4gaG9sZCBjb3VsZCBiZSBtb3JlIGVhc2lseSAKZGlzcG9zc2Vzc2VkLiBJbiBzcGl0ZSBvZiBpdHMgZnJlbnppZWQgZWZmb3J0cyAKaXRzIHBvd2VyIHNlZW1zIHNvb24gdG8gZmFpbCwgYW5kIEkgYmVsaWV2ZSAKdGhlcmUgaXMgbm8gaW5zdGFuY2Ugb24gcmVjb3JkIG9mIGl0cyBzdWNjZXNzLSAKZnVsbHkgc3RlYWxpbmcgYSBzZWNvbmQgYm9keSBhZnRlciBpdHMgZmlyc3QgCnRoZWZ0IGlzIHdvcm4gb3V0LiBUaGUgY3JlYXR1cmUgaXMgYSBkZW1vbiAKb2YgdGhlIG1vc3QgdGVycmlibGUgdHlwZeKAlGEgbW9uc3RlciBmb3IgCndoaWNoIHRoZXJlIGlzIG5vIHBlcm1hbmVudCBwbGFjZSBpbiB0aGUgCgoKNDM2IEFEWUFSIFRBTEtTIAoKCnNjaGVtZSBvZiBldm9sdXRpb24gdG8gd2hpY2ggd2UgYmVsb25nLiAKCkl0cyBuYXR1cmFsIHRlbmRlbmN5IHRoZXJlZm9yZSBpcyB0byBkcmlmdCAKb3V0IG9mIHRoaXMgZXZvbHV0aW9uLCBhbmQgdG8gYmUgZHJhd24gYnkgCnRoZSBpcnJlc2lzdGlibGUgZm9yY2Ugb2YgbGF3IGludG8gdGhhdCBhc3RyYWwgCmNlc3Nwb29sIHdoaWNoIGluIGVhcmhlciBUaGVvc29waGljYWwgd3JpdC0gCmluZ3Mgd2FzIGNhbGxlZCB0aGUgZWlnaHRoIHNwaGVyZSwgYmVjYXVzZSAKd2hhdCBwYXNzZXMgaW50byBpdCBzdGFuZHMgb3V0c2lkZSB0aGUgLiByaW5nIAp2ZiBzZXZlbiB3b3JsZHMsIGFuZCBjYW5ub3QgcmV0dXJuIGludG8gCnRoZWlyIGV2b2x1dGlvbi4gVGhlcmUsIHN1cnJvdW5kZWQgYnkg4oCYbG9hdGgtIApzb21lIHJlbGljcyBvZiBhbGwgdGhlIGNvbmNlbnRyYXRlZCB2aWxlbmVzcyAKb2YgdGhlIGFnZXMgdGhhdCBhcmUgcGFzdCwgYnVybmluZyBldmVyIAp3aXRoIGRlc2lyZSwg4oCYeWV0IHdpdGhvdXQgcG9zc2liaWxpdHkgb2YgCnNhdGlzZmFjdGlvbiwgdGhpcyBtb25zdHJvc2l0eSBzbG93bHkgZGVjYXlzLCAKaXRzIG1lbnRhbCBhbmQgY2F1c2FsIG1hdHRlciBiZW1nIHRodXMgYXQgCmxhc3Qgc290IGZyZWXigJRuZXZlciBpbmRlZWQgdG8gcmVqb2ltIHRoZSBlZ28gCmZyb20gd2hpY2ggaXQgaGFzIHRvcm4gaXRzZWxmLCBidXQgdG8gYmUgCmRpc3RtYnV0ZWQgYW1vbmcgdGhlIG90aGVyIG1hdHRlciBvZiB0aGUgCnBsYW5lIHRvIGVudGVyIGdyYWR1YWxseSBpbnRvIGZyZXNoIGNvbWJpbmEtIAp0aW91cywgYW5kIHNvIGJlIHB1dCB0byBiZXR0ZXIgdXNlcy4gSXQgaXMgCmNvbnNvbGluZyB0byBrbm93IHRoYXQgc3VjaCBlbnRpdGllcyBhcmUgc28gCnJhcmUgYXMgdG8gYmUgcHJhY3RpY2FsbHkgdW5rbm93biwgYW5kIHRoYXQgCnRoZXkgaGF2ZSB0aGUgcG93ZXIgdG8gc2VpemUgb25seSB0aG9zZSAKd2hvIGhhdmUgaW4gdGhlaXIgbmF0dXJlIHByb25vdW5jZWQgZGVmZWN0cyAKb2Yga2luZHJlZCB0eXBlLiAKCkJ1dCB0aGVyZSBpcyB8IGFub3RoZXIgdHlwZSBvZiB0aGUgYmxhY2sgCmluYWdpY2lhbiwgaSBvdXR3YXJkIGFwcGVhcmFuY2UgbW9yZSBfcmUtIApzcGVjdGFibGUsIHlldCByZWFsbHkgZXZlbiBtb3JlIGRhbmdlcm91cywgCmJlY2F1c2UgbW9yZSBwb3dlcmZ1bC4gVGhpcyBpcyB0aGUgbWFuIAoKCkxPU1QgU09VTFMgNDM3IAoKCndobyBpbnN0ZWFkIG9mIGdpdmluZyBoaW1zZWxmIHVwIGFsdG9nZXRoZXIgCnRvIHNlbnN1YWxpdHkgb2Ygb25lIGtpbmQgb3IgYW5vdGhlciwgc2V0cyAKYmVmb3JlIGhpbXNlbGYgdGhlIGdvYWwgb2YgYSBtb3JlIHJlZmluZWQgCmJ1dCBub3QgbGVzcyB1bnNjcnVwdWxvdXMgc2VsZmlzaG5lc3MuIEhpcyAKb2JqZWN0IGlzIHRoZSBhY3F1aXNpdGlvbiBvZiBhbiBvY2N1bHQgcG93ZXIgCmx1Z2hldCBhbmQgd2lkZXIgaW5kZWVkLCBidXQgdG8gYmUgdXNlZCAKdWx3YXlzIGZvciBoaXMgb3duIHZyYXRpZmljYXRpb24gYW5kIGFkLSAKdmFuY2VtZW50LCB0byBmdXJ0aGVyIGJpcyBvd24gYW1iaXRpb24gb3IgCnNhdGlzZnkgaGlzIG93biByZXZlbmdlLiAKCkluIG9yZGVyIHRvIGdhbSB0aGlzIGhlIGFkb3B0cyB0aGUgbW9zdCAKbmdpZCBhc2NldGljaXNtIGFzIHJlZ2FyZHMgbWVyZSBfIGZpZXNobHkgCmRlc2lyZXMsIGFuZCBzdGFydmVzIG91dCB0aGUgZ3Jvc3NlciBwYXJ0aWNsZXMgCm9mIGhpcyBhc3RyYWwgYm9keSBhcyBwZXJzZXZlcmluZ2x5IGFzIGRvZXMgCnRoZSBwdXBpbCBvZiB0aGUgR3JlYXQgV2hpdGUgQnJvdGhlcmhvb2QuIApCdXQgdGhvdWdoIGl0IGlzIG9ubHkgYSBKZXNzIG1hdGVtYWwga2luZCAKb2YgZGVzaXJlIHdpdGggd2hpY2ggaGUgd2lsbCBhbGxvdyBoaXMgbWluZCAKdG8gYmVjb21lIGVudGFuZ2xlZCwgdGhlIGNlbnRyZSBvZiBoaXMgZW5lcmd5IAppcyB1b25lIHRoZSBKZXNzIGVudGFyZWx5IG0gaGlzIHBlcnNvbmFsaXR5LCAKYW5kIHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgYXN0cmFsIGxpdGUgdGhlIAp0aW1lIG9mIHRoZSBzZXBhcmF0aW9uIGNvbWVzLCB0aGUgZWdvIGlzIGFibGUgCnRvIHJlY292ZXIgbm8gd2hpdCBvZiBoaXMgaW52ZXN0bWVudC4gRm9yIAp0aGUgbWFuIHRoZXJlZm9yZSB0aGUgcmVzdWx0IGlzIG11Y2ggdGhlIApzYW1lIGFzIGluIHRoZSBmb3JtZXIgY2FzZSwgZXhjZXB0IHRoYXQgCmhlIHdpbGwgcmVtYWluIGluIHRvdWNoIHdpdGggdGhlIHBlcnNvbmFsaXR5IAptdWNoIGxvbmdlciwgYW5kIHdpbGwgdG8gc29tZSBleHRlbnQgc2hhcmUgCml0cyBleHBlcmllbmNlcyBzbyBmYXIgYXMgaXQgaXMgcG9zc2libGUgZm9yIAphbiBlZ28gdG8gc2hhcmUgdGhlbS4gCgpUaGUgZmF0ZSBvZiB0aGF0IHBlcnNvbmFsaXR5LCBob3dldmVyLCBpcyAKCgo0MzggQURZQVIgVEFMS1MgCgoKdmVyeSBkaWZmZXJlbnQuIFRoZSBjb21wYXJhdGl2ZWx5IHRlbnVvdXMgCmFzdHJhbCBpbnRlZ3VtZW50IGlzIG5vdCBzdHJvbmcgZW5vdWdoIHRvIApob2xkIGl0IGZvciBhbnkgbGVuZ3RoIG9mIHRpbWUgb24gdGhlIGFzdHJhbCAKcGxhbmUsIGFuZCB5ZXQgaXQgaGFzIGVudGlyZWx5IGxvc3QgdG91Y2ggCndpdGggdGhlIGhlYXZlbi13b3JsZCB3aGljaCBzaG91bGQgaGF2ZSAKYmVlbiBpdHMgaGFiaXRhdC4gRm9yIHRoZSB3aG9sZSBlZnRlcnQgb2YgCnRoZSBtYW7igJlzIGxpZmUgaGFzIGJlZW4gdG8ga2lsbCBvdXQgc3VjaCAKdGhvdWdodHMgYXMgbmF0dXJhbGx5IGZpbmQgdGhlaXIgcmVzdWx0IGF0IAp0aGF0IGxldmVsLiBIaXMgb25lIGVuZGVhdm91ciBoYXMgYmVlbiB0byAKb3Bwb3NlIG5hdHVyYWwgZXZvbHV0aW9uLCB0by4gc2VwYXJhdGUgaGltLSAKc2VsZiBmcm9tIHRoZSBncmVhdCB3aG9sZSBhbmQgdG8gd2FyIGF2YWluc3QgCml0OyBhbmQgYXMgZmFyIGFzIHRoZSBwZXJzb25hbGl0eSBnb2VzIGhlIApoYXMgc3VjY2VlZGVkLiBJdCBpcyBjdXQgb2ZmIGZyb20gdGhlIGxoZ2h0IAp1bmQgbGlmZSBvZiB0aGUgc29sYXIgc3lzdGVtOyBhbGwgdGhhdCBpcyAKbGVmdCB0byBpdCBpcyB0aGUgc2Vuc2Ugb2YgYWJzb2x1dGUgaXNvbGF0aW9uLCAKb2YgYmVpbmcgYWxvbmUgaW4gdGhlIHVuaXZlcnNlLiAKCldlIHNlZSB0aGVyZWZvcmUgdGhhdCBpbSB0aGlzIHJhcmVyIGNhc2UgCnRoZSBsb3N0IHBlcnNvbmFsaXR5IHByYWN0aWNhbGx5IHNoYXJlcyB0aGUgZmF0ZSAKb2YgdGhlIGVnbyBmcm9tIHdoaWNoIGl0IGlzIGluIHByb2Nlc3Mgb2YgCmRldGFjaGluZyBpdHNlbGYuIEJ1dCBpbiB0aGUgY2FzZSBvZiB0aGUgCmVnbyBzdWNoIGFuIGV4cGVyaWVuY2UgaXMgb25seSB0ZW1wb3JhcnksIAphbHRob3VnaCBpdCBtYXkgbGFzdCBmb3Igd2hhdCB3ZSBzaG91bGQgCmNhbGwgYSB2ZXJ5IGxvbmcgdGltZSwgYW5kIHRoZSBlbmQgb2YgaXQgCmZvciBoaW0gd2lsbCBiZSByZWluY2FybmF0aW9uIGFuZCBhIGZyZXNoIApvcHBvcnR1bml0eS4gRm9yIHRoZSBwZXJzb25hbGl0eSBob3dldmVyIAp0aGUgZW5kIG9mIGl0IGlzIGRpc2ludGVncmF0aW9u4oCUdGhlIGludmFyaWEtIApibGUgZW5kIG9mIHRoYXQgd2hpY2ggaGFzIGN1dCBpdHNlbGYgb2ZmIApmcm9tIGl0cyBzb3VyY2U6IGJ1dCB0aHJvdWdoIHdoYXQgc3RhZ2VzIAoKCkxPU1QgU09VTFMgNDM5IAoKCm9mIGhvcnJvciB0aGUgbG9zdCBwZXJzb25hbGl0eSBwYXNzZXMgYmVmb3JlIAp0aGF0IGlzIHJlYWNoZWQsIHdobyBzaGFsbCBzYXk/IFlldCBiZSBpdCAKcmVtZW1iZXJlZCB0aGF0IG5laXRoZXIgb2YgdGhlc2Ugc3RhdGVzIGlzIApldGVybmFs4oCUdGhhdCBuZWl0aGVyIG9mIHRoZW0gY2FuIGluIGFueSAKY2FzZSBiZSByZWFjaGVkIGV4Y2VwdCBieSBkZWxpYmVyYXRlIGxpZmUtIApsb25nIHBlcnNpc3RlbmNlIGluIGV2aWwuIAoKVCBoYXZlIGhlYXJkIGZyb20gb3VyIFByZXNpZGVudCBvZiAKeWV0IGFub3RoZXIgZXZlbiBtb3JlIHJlbW90ZSBwb3NzaWJpbGl0eSwgCm9mIHdoaWNoIFQgaGF2ZSBuZXZlciBteXNlbGYgc2VlbiBhbiBpbi0gCnN0YW5jZS4gSXQgaXMgc3RhdGVkIHRoYXQsIGp1c3QgYXMgKMKiKSBtYXkgCmFic29yYiAoYikgYW5kIHJldm9sdCBhZ2FpbnN0ICg3KSwgc2V0IHVwIG9uIAppdHMgb3duIGFjY291bnQgYW5kIGJyZWFrIGF3YXksIGl0IGlzIChvciAKYXQgYW55IHJhdGUgaGFzIGJlZW4gaW4gdGhlIHBhc3QpIGp1c3QgCndpdGhpbiB0aGUgbGltaXRzIG9mIHByYWN0aWNhYmlodHkgdGhhdCB0aGUgCmRlYWRseSBkaXNlYXNlIG9mIHNlcGFyYXRlbmVzcyBhbmQgc2VsZmlzaG5lc3MgCm1heSBpbmZlY3QgKEApIGFsc28sIHRoYXQgaXQgdG9vIG1heSBiZSBhYi0gCnNvcmJlZCBpbnRvIHRoZSBtb25zdHJvdXMgZ3Jvd3RoIG9mIGV2aWwsIAphbmQgbWF5IGJlIHRvcm4gYXdheSBmcm9tIHRoZSB1bmRldmUtIApsb3BlZCBwb3J0aW9uIG9mIHRoZSBlZ28sIHNvIHRoYXQgdGhlIGNhdXNhbCAKYm9keSBpdHNlbGYgbWF5IGJlIGhhcmRlbmVkIGFuZF8gY2FycmllZCAKYXdheSwgaW1zdGVhZCBvZiBvbmx5IHRoZSBwZXJzb25hbGl0eS4gCgpJZiB0aGlzIGJlIHNvLCBpdCBjb25zdGl0dXRlcyB2ZXQgYSBmb3VydGggCmVyb3VwLCBhbmQgd291bGQgY29ycmVzcG9uZCBub3QgdG8gYW4gCmFtcHV0YXRpb24sIGJ1dCB0byBhbiBlbnRpcmUgZGVzdHJ1Y3Rpb24gb2YgCnRoZSBib2R5LiBTdWNoIGFuIGVnbyBjb3VsZCBub3QgcmVpbWNhci0gCm5hdGUgaW0gdGhlIGh1bWFuIHJhY2U7IGVnbyB0aG91Z2ggaXQgCmJlLCBpdCB3b3VsZCBmYWxsIGludG8gdGhlIGRlcHRocyBvZiAKYW5pbWFsIGhmZSwgYW5kIHdvdWxkIG5lZWQgYXQgbGVhc3QgYSAKCgo0NCkgQURZQVIgVEFMS1MgCgoKd2hvbGUgY2hhaW4tcGVyaW9kIHRvIHJlZ2FpbiB0aGUgc3RhdHVzIAp3aGljaCBpdCBoYWQgbG9zdC4gQnV0IHRoaXMsIHRob3VnaCB0aGVvcmV0LSAKaWNhbGx5IHBvc3NpYmxlLCBpcyBwcmFjdGljYWxseSBzY2FyY2VseSBjb24tIApjZWl2YWJsZS4gWWV0IGl0IHdpbGwgYmUgbm90ZWQgdGhhdCBldmVuIAp0aGVuIHRoZSB1bmRldmVsb3BlZCBwYXJ0IG9mIHRoZSBlZ28gcmUtIAptYWlucyBhcyB0aGUgdmVoaWNsZSBvZiB0aGUgbW9uYWQuIOKAmCAKCldlIGxlYXJuIHRoZW4gdGhhdCBuaWxob25zIG9mIGJhY2t3YXJkIAplZ29zLCB1bmFibGUgYXMgeWV0IHRvIGJlYXIgdGhlIHN0cmFpbiBvZiAKdGhlIGhpZ2hlciBldm9sdXRpb24sIHdpbGwgZmFsbCBvdXQgaW0gdGhlIAptaWRkbGUgb2YgdGhlIGZpZnRoIHJvdW5kIGFuZCBjb21lIGFsb25nIApvbiB0aGUgY3Jlc3Qgb2YgdGhlIGZvbGxvd2luZyB3YXZlOyB0aGF0IAp0aG9zZSB3aG8gbGl2ZSBzZWxmaXNobHksIHdoZXRoZXIgaW4gdGhlIAppbnRlbGxlY3TigJkgb3IgdGhlIHBhc3Npb25zLCBkbyBzbyBhdCB0aGVpciBvd24gCnByb3BlciBwZXJpbCwgYW5kIGF0IHRoZSBzZXJpb3VzIHJpc2sgb2YgbXVjaCAKc29ycm93IGFuZCBsb3NzOyB0aGF0IHRob3NlIHdobyBhcmUgc28gCmZvb2xpc2ggYXMgdG8gZGFiYmxlIGluIGJsYWNrIG1hZ2ljIG1heSAKYnJpbmcgdXBvbiB0aGVtc2VsdmVzIGhvcnJvcnMgYmVmb3JlIHdoaWNoIAppbWFnaW5hdGlvbiBzaHJpbmtzIGFwcGFsbGVkOyBidXQgdGhhdCB0aGUgCnRlcm0g4oCYbG9zdCBzb3Vs4oCZIGlzLCBhZnRlciBhbGwsIGEgbWlzbm9tZXIsIApzaW5jZSBldmVyeSBtYW4gaXMgYSBzcGFyayBvZiB0aGUgZGl2aW5lIApmaXJlLCBhbmQgdGhlcmVmb3JlIGNhbiBuZXZlciB1bmRlciBhbnkgCmNpcmN1bXN0YW5jZXMgYmUgbG9zdDogb3IgZXh0aW5ndWlzaGVkLiBUaGUgCndpbGwgb2YgdGhlIExvY29zIGlzIG1hbuKAmXMgZXZvbHV0aW9uLiBJbiBvdXIgCmJsaW5kbmVzcyB3ZSBtYXkgZm9yIGEgdGltZSByZXNpc3QgSGltLCAKYnV0IHRvIEhpbSB0aW1lIGlzIG5hdWdodCwgYW5kIGlmIHdlIApjYW5ub3Qgc2VlIHRvLWRheSBIZSB3YWl0cyBwYXRpZW50bHkgdGlsbCB0by0gCm1vcnJvdywgYnV0IGFsd2F5cyBpbiB0aGUgZW5kIEhpcyB3aWxsIGlzIApkb25lLiAKCgpUSEUgRk9DVVMgT0YgQ09OU0NJT1VTTkVTUyBBQSAKCgpUSGUgRm9jdXMgb3IgQ29ObnNjbG91c05uRXNzIAoKClRoZSBjb25zY2lvdXNuZXNzIGluIG1hbiBjYW4gb25seSBiZSBmb2N1c3NlZCAKaW4gb25lIHZlaGljbGUgYXQgYSB0aW1lLCB0aG91Z2ggaGUgbWF5IApiZSBzaW11bHRhbmVvdXNseSBjb25zY2lvdXMgdGhyb3VnaCB0aGUgCm90aGVycyBpbiBhIHZhZ3VlciB3YXkuIElmIHlvdSB3aWxsIGhvbGQgCnVwIGEgZmluZ2VyIGluIGZyb250IG9mIHlvdXIgZmFjZSB5b3Ugd2lsbCAKZmluZCB0aGF0IHlvdX4gY2FuIHNvIGZvY3VzIHlvdXIgZXllcyBhcyAKdG8gc2VlIHRoZSBmaW5nZXIgcGVyZmVjdGx5LiBBdCB0aGUgc2FtZSAKdGltZSB5b3Ugd2lsbCBzZWUgdGhlIHdhbGwgYW5kIF8gZnVybml0dXJlIApiZWhpbmQgdGhlIGZpbmdlciwgYnV0IG5vdCBwZXJmZWN0bHksIGJlY2F1c2UgCnRoZXkgYXJlIG91dCBvZiBmb2N1cy4gSW4gYSBtb21lbnQgdm91IApjYW4gY2hhbmdlIHRoZSBmb2N1cyBvZiB5b3VyIGV5ZXMsIHNvIHRoYXQgCnlvdSB3aWxsIHNlZSB0aGUgd2FsbCBhbmQgdGhlIGZ1cm5pdHVyZSAKcGVyZmVjdGx5IDsgaW4gdGhhdCBjYXNlIHlvdSB3aWxsIHN0aWxsIHNlZSAKdGhlIGZpbmdlciwgYnV0IHdpbGwgc2VlIGl0IG9ubHkgZGltbHksIApiZWNhdXNlIGl0IGluIHR1cm4gaXMgbm93IG91dCBvZiBmb2N1cy4gCgpQcmVjaXNlbHkgaW4gdGhlIHNhbWUgd2F5IGlmIGEgbWFuIHdobyAKaGFzIGRldmVsb3BlZCBhc3RyYWwgYW5kIG1lbnRhbCBjb25zY2lvdXMtIApuZXNzIGZvY3Vzc2VzIGhpbXNlbGYgaW4gdGhlIHBoeXNpY2FsIGJyYWluIGFzIAppbiBvcmRpbmFyeSBsaWZlLCBoZSB3aWxsIHNlZSBwZXJ0ZWN0bHkgdGhlIApwaHlzaWNhbCBib2RpZXMgb2YgaGlzIGZyaWVuZHMsIGFuZCB3aWxsIGF0IAp0aGUgc2FtZSB0aW1lIHNlZSB0aGVpciBhc3RyYWwgYW5kIG1lbnRhbCAKYm9kaWVzLCBidXQgb25seSBzb21ld2hhdCBkaW1seS4gSW4gZmFyIApsZXNzIHRoYW4gYSBtb21lbnQgaGUgY2FuIGNoYW5nZSB0aGF0IApmb2N1cyBzbyB0aGF0IGhlIHdpbGwgc2VlIHRoZSBhc3RyYWwgcXVpdGUgCmZ1bGx5IGFuZCBwZXJmZWN0bHkuIEluIHRoYXQgY2FzZSBoZSB3aWxsIAoKCnN0aWxsIHNlZSB0aGUgbWVudGFsIGFuZCBfIHBoeXNpY2FsIGJvZGllcywgCjU2IAoKCjQsNDIgQURZQVIg4oCYVEFMS1MgCgoKYnV0IG5vdCBpbiBmdWxsIGRldGFpbC4gVGhlIHNhbWUgdGhpbmcgMXMgCnRydWUgb2YgdGhlIG1lbnRhbCBzaWdodCBhbmQgb2YgdGhlIHNpZ2h0IG9mIApoaWdoZXIgcGxhbmVzLiAKCllvdSBhc2sgaG93IGl0IGlzIHBvc3NpYmxlIGZvciBhbiBlbnRpdHkgCmZ1bmN0aW9uaW5nIG9uIHRoZSBhc3RyYWwgcGxhbmUgdG8gYmUgYXdhcmUgCm9mIGEgcGh5c2ljYWwgYWNjaWRlbnQgb3IgdG8gaGVhciBhXyBwaHlzaWNhbCAKZXJ5LiBJdCB3b3VsZCBub3QgYmUgdGhlIHBoeXNpY2FsIGNyeSB0aGF0IApoZSB3b3VsZCBoZWFyOyBwaHlzaWNhbCBzb3VuZHMgYXNzdXJlZGx5IApwcm9kdWNlIGFuIGVmZmVjdCB1cG9uIHRoZSwgYXN0cmFsIC0gcGxhbmUsIAp0aG91Z2ggSSBkbyBub3QgdGhpbmsgdGhhdCDigJh3ZSBzaG91bGQgYmUgCnF1aXRlIGNvcnJlY3QgaW4gY2FsbGluZyB0aGF0IHJlc3VsdCBzb3VuZC4gCkFueSBjcnkgd2hpY2ggaGFkIGluIGl0IHN0cm9uZyBmZWVsaW5nIG9yIAplbW90aW9uIHdvdWxkIHByb2R1Y2UgYV8gc3Ryb25nIGVmZmVjdCAKdXBvbiB0aGUgYXN0cmFsIHBsYW5lLCBhbmQgd291bGQgY29udmV5IApleGFjdGx5IHRoZSBzYW1lIGlkZWEgdGhlcmUgYXMgaGVyZS4gSW4gCnRoZSBjYXNlIG9mIGFuIGFjY2lkZW50IHRoZSBydXNoIG9mIGVtb3Rpb24gCmNhdXNlZCBieSB0aGUgcGFpbiBvciB0aGUgZnJpZ2h0IHdvdWxkIGZsYW1lIApvdXQgaGtlIGEgZ3JlYXQgbGlnaHQsIGFuZCBjb3VsZCBub3QgZmFpbCB0byAKYXR0cmFjdCB0aGUgYXR0ZW50aW9uIG9mIGEgc2VlciBpZiBoZSB3ZXJlIAphbnl3aGVyZSBuZWFyLiBBIGNhc2UgaW4gd2hpY2ggdGhpcyB2ZXJ5IAp0aGluZyBvY2N1cnJlZCBpcyByZWxhdGVkIGluIEludmlzaWJsZSBIZWxwZXJzIArigJTigJRhIGNhc2UgaW4gd2hpY2ggYSBib3kgZmVsbCBvdmVyIGEgY2xpZmY7IAphbmQgd2FzIHN1cHBvcnRlZCBhbmQgY29tZm9ydGVkIGJ5IEN5cmlsIAp1bnRpbCBwaHlzaWNhbCBoZWxwIGNvdWxkIGJlIGJyb3VnaHQuIAoKCkZPUk9FLUNFTlRSRVMgNDQzIAoKCkZvcmNyZS1DRU5UUkVTIAoKCkluIGVhY2ggb2Ygb3VyIHZlaGljbGVzIHRoZXJlIGFyZSBjZXJ0YWluIApmb3JjZS1jZW50cmVzIHdoaWNoIGluIFNhbnNrcml0IGFyZSBjYWxsZWQgCmNoYWtyYW1z4oCUYSB3b3JkIHdoaWNoIHNpZ25pZmllcyBhIHdoZWVsIG9yIApyZXZvbHZpbmcgZGlzYy4g4oCYVGhlc2UgYXJlIHBvaW50cyBvZiBjb25uZWMtIAp0aW9uIGF0IHdoaWNoIGZvcmNlIGZsb3dzIGZyb20gb25lIHZlaGljbGUgdG8gCmFub3RoZXIuIFRoZXkgbWF5IGVhc2lseSBiZSBzZWVuIGluIHRoZSAKZXRoZXJpYy4gZG91YmxlLCB3aGVyZSB0aGV5IHNob3cgdGhlbXNlbHZlcyAKYXMgc2F1Y2VyLWxpa2U+IGRlcHJlc3Npb25zIG9yIHZvcnRpY2VzIGluIGl0cyAKc3VyZmFjZS4gVGhleSBhcmUgb2Z0ZW4gc3Bva2VuIG9mIGFzIApjb3JyZXNwb25kaW5nIHRvIGNlcnRhaW4gcGh5c2ljYWwgb3JnYW5zOyAKYnV0IGl0IG11c3QgYmUgcmVtZW1iZXJlZCB0aGF0IHRoZSBldGhlcmljIApmb3JjZS1jZW50cmUgaXMgbm90IGltIHRoZSBpbnRlcmlvciBvZiB0aGUgCmJvZHksIGJ1dCBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZXRoZXJpYyAKZG91YmxlLCB3aGljaCBwcm9qZWN0cyBhIHF1YXJ0ZXIgb2YgYW4gSW5jaCAKYmV5b25kIHRoZSBvdXRsbmUgb2YgLXRoZSBkZW5zZXIgbWF0dGVyLiAKClRoZSBjZW50cmVzIHdoaWNoIGFyZSB1c3VhbGx5IGVtcGxveWVkIAppbiBvY2N1bHQgZGV2ZWxvcG1lbnQgYXJlIHNldmVuLCBhbmQgdGhleSAKYXJlIHNpdHVhdGVkIGluIHRoZSBmb2xsb3dpbmcgcGFydHMgb2YgdGhlIApib2R5OiAoMSkgdGhlIGJhc2Ugb2YgdGhlIHNwbWU7ICgyKSB0aGUgCm5hdmVsOyAoOCkgdGhlIHNwbGVlbjsgKCspIHRoZSBoZWFydDsgKDUpIAp0aGUgdGhyb2F0OyAoNikgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGV5ZS0gCmJyb3dzOyBhbmQgKDcpIHRoZSB0b3Agb2YgdGhlIGhlYWQuIFRoZXJlIAphcmUgb3RoZXIgZm9yY2UtY2VudHJlcyBtIHRoZSBib2R5IGJlc2lkZXMgCnRoZXNlLCBidXQgdGhleSBhcmUgbm90IGVtcGxveWVkIGJ5IHN0dS0gCmRlbnRzIG9mIHRoZSB3aGl0ZSBtYWdpYy4gSXQgbWF5IGJlIApyZW1lbWJlcmVkIHRoYXQgTWFkYW1lIEJsYXZhdHNreSBzcGVha3MgCgoKNDQsNCwgQURZQVIgVEFMS1MgCgoKb2YgdGhyZWUgb3RoZXJzIHdoaWNoIHNoZSBjYWxscyB0aGUgbG93ZXIgCmNlbnRyZXM6IHRoZXJlIGFyZSBzY2hvb2xzIHdoaWNoIHVzZSB0aGVzZSwgCmJ1dCB0aGUgZGFuZ2VycyBjb25uZWN0ZWQgd2l0aCB0aGVtIGFyZSAKc28gc2VyaW91cyB0aGF0IHdlIHNob3VsZCBjb25zaWRlciB0aGVpciAKYXdha2VuaW5nIGFzIHRoZSBncmVhdGVzdCBvZiBtdXNmb3J0dW5lcy4gCgpUaGVzZSBzZXZlbiBhcmUgb2Z0ZW4gZGVzY3JpYmVkIGFzLCBjb3ItIApyZXNwb25kaW5nIHRvIHRoZSBzZXZlbiBjb2xvdXJzIGFuZCB0byB0aGUgCm5vdGVzIG9mIHRoZSBtdXNpY2FsIHNjYWxlOyBhbmQgaW4gdGhlIApJbmRpYW4gYm9va3MgY2VydGFpbiBsZXR0ZXJzIG9mIHRoZSBhbHBoYWJldCAKd2lkIGNlcnRhaW4gZm9ybXMgb2Ygdml0YWxpdHkg4oCYYXJlIG1lbnRpb25lZCAKYXMgYXR0YWNoZWQgdG8gZWFjaCBvZiB0aGVtLiBUaGV5IGFyZSAKYWxzbyBwb2V0aWNhbGx5IGRlc2NyaWJlZCBhcyByZXNlbWJsaW5nIGZsb3dlcnMsIAphbmQgdG8gZWFjaCBvZiB0aGVtIGEgY2VydGFpbiBudW1iZXIgCm9mIHBldGFscyBpcyBhc3NpZ25lZC4gCgpbSXQgbXVzdCBiZSByZW1lbWJlcmVkIHRoYXQgdGhleSBhcmUgCnZvcnRpY2VzIG9mIGV0aGVyaWMgbWF0dGVyLCBhbmQgdGhhdCB0aGV5IGFyZSAKdWxsIGluIHJhcGlkIHJvdGF0aW9uLiBJbnRvIGVhY2ggb2YgdGhlc2UgCm9wZW4gbW91dGhzLCBhdCByaWdodCBhbmdsZXMgdG8gdGhlIHBsYW5lIApvZiB0aGUgd2hpcmxpbmcgZGlzYyBvciBzYXVjZXIsIHJ1c2hlcyBhIGZvcmNlIApmcm9tIHRoZSBhc3RyYWwgd29ybGQgKHdoaWNoIHdlIHdpbGwgY2FsbCAKdGhlIHByaW1hcnkgZm9yY2Up4oCUb25lIG9mIHRoZSBmb3JjZXMgb2YgdGhlIApMb2Nvcy4gVGhhdCBmb3JjZSBpcyBzZXZlbi1mb2xkIGluIGl0cyAKbmF0dXJlLCBhbmQgYWxsIGl0cyBmb3JtcyBvcGVyYXRlIGluIGFsbCB0aGUgCmNlbnRyZXMsIHRob3VnaCBpbiBjYWNoIG9mIHRoZW0gb25lIG9mIHRoZSAKZm9ybXMgaXMgYWx3YXlzIGdyZWF0bHkgcHJlZG9taW5hdXQuIAoKVGhpcyBpbnJ1c2ggb2YgZm9yY2UgYnJpbmdzIHRoZSBkaXZpbmUgCmxpZmUgaW50byB0aGUgcGh5c2ljYWwgYm9keSwgYW5kIHdpdGhvdXQgaXQgCnRoYXQgYm9keSBjb3VsZCBub3QgZXhpc3QuIFRoZXNlIGNlbnRyZXMgCgoKRk9SQ0UtQ0VOVFJFUyBBQUQgCgoKdGhyb3VnaCB3aGljaCB0aGUgZm9yY2UgY2FuIGVudGVyIGFyZSB0aGVyZS0gCmZvcmUgYWN0dWFsbHkgbmVjZXNzYXJ5IHRvIHRoZSBleGlzdGVuY2Ugb2YgCnRoZSB2ZWhpY2xlLCBhbmQgc28gYXJlIGluIG9wZXJhdGlvbiDCpyBpbiAKZXZlcnkgb25lLCBidXQgdGhleS4gbWF5IGJlIHdoaXJsaW5nIHdpdGggCnZlcnkgZGlmZmVyZW50IGRlZ3JlZXMgb2YgYWN0aXZpdHkuIOKAmGhlaXIgCnBhcnRpY2xlcyBtYXkgYmUgaW4gY29tcGFyYXRpdmVseSBzbHVnZ2lzaCAKbW90aW9uLCBqdXN0IGZvcm1pbmcgdGhlIG5lY2Vzc2FyeSB2b3J0ZXggCmZvciB0aGUgZm9yY2UgYW5kIG5vIG1vcmUsIG9yIHRoZXkgbWF5IGJlIApnbG93aW5nIGFuZCDigJhwdWxzYXRpbmcgd2l0aCBsaXZpbmcgbGlnaHQgc28gCnRoYXQgYW4gZW5vcm1vdXNseSBncmVhdGVyIGFtb3VudCBvZiBmb3JjZSAKcGFzc2VzIHRocm91Z2ggdGhlbSwgd2l0aCB0aGUgcmVzdWx0IHRoYXQgCnZhcmlvdXMgYWRkaXRpb25hbCBmYWN1bHRpZXMgYW5kIHBvc3NpYmlsaXRpZXMgCmFyZSBvcGVuZWQgdG8gdGhlIGVnbyBhcyBoZSBmdW5jdGlvbnMgb24gCnRoYXQpIHBsYW5lLiAKCk5vdyB0aG9zZSBmb3JjZXMgd2hpY2ggcnVzaCBpbnRvIHRoZSAKY2VudHJlIGZyb20gd2l0aG91dCBzZXQgdXAgYXQgcmlnaHQgYW5nbGVzIAp0byB0aGVtc2VsdmVzICh0aGF0IDFzIHRvIHNheSwgaW1fIHRoZSAKc3VyZmFjZSBvZiB0aGUgZXRoZXJpYyBkb3VibGUpIHNlY29uZGFyeSAKZm9yY2VzIGluIHVuZHVsYXRvcnkgY2lyY3VsYXIgbW90aW9uLCBqdXN0IGFzIAphIGJhci1tYWduZXQgdGhydXN0IGludG8gYW4gaW5kdWN0aW9uIGNvaWwgCnByb2R1Y2VzIGEgY3VycmVudCBvZiBlbGVjdHJpY2l0eSB3aGljaCBmaW93cyAKcm91bmQgdGhlIGNvaWwgYXQgcmlnaHQgYW5nbGVzIHRvIHRoZSBheGlzIApvciBkaXJlY3Rpb24gb2YgdGhlIG1hZ25ldC4gVGhlIHByaW1hcnkgCmZvcmNlIGl0c2VsZiBoYXZpbmcgZW50ZXJlZCB0aGUgdm9ydGV4LCAKcmFkaWF0ZXMgdHJvbSBpdCBhZ2FtIGF0IHJpZ2h0IGFuZ2xlcywgYnV0IAppbiBzdHJhaWdodCBsaW5lcywgYXMgdGhvdWdoIHRoZSBjZW50cmUgb2YgCnRoZSB2b3J0ZXggd2VyZSB0aGUgaHViIG9mIGEgd2hlZWwsIGFuZCAKdGhlIHJhZGlhdGlvbnMgb2YgdGhlIHByaW1hcnkgZm9yY2UgaXRzIAoKCjQ0NiBBRFlBUiAnVEFMS1MgfCAKCgpzcG9rZXMuIFRoZSBudW1iZXIgb2YgdGhlc2Ug4oCYc3Bva2Vz4oCZIApkaWZmZXJzIGluIHRoZSBkaWZmZXJlbnQgZm9yY2UtY2VudHJlcywgYW5kIApkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Yg4oCYcGV0YWxz4oCZIHdoaWNoIAplYWNoIG9mIHRoZW0gZXhoaWJpdHMuIAoKRWFjaCBvZiB0aGVzZSBzZWNvbmRhcnkgZm9yY2VzLCB3aGljaCAKc3dlZXAgcm91bmQgdGhlIHNhdWNlci1sa2UgZGVwcmVzc2lvbiwgCmhhcyBpdHMgb3duIGNoYXJhY3RlcmlzdGljIHdhdmUtbGVuZ3RoLCBqdXN0IAphcyBoYXMgbGlnaHQgb2YgYSBjZXJ0YWluIGNvbG91cjsgYnV0IGluc3RlYWQgCm9mIG1vdmluZyBpbiBhIHN0cmFpZ2h0IGxpbmUgYXMgaGlnaHQgZG9lcywgCml0IG1vdmVzIGFsb25nIGluIGNlcnRhaW4gcmVsYXRpdmVseSBsYXJnZSAKdW5kdWxhdGlvbnMgb2YgdmFyaW91cyBzaXplcywgZWFjaCBvZiB3aGljaCAKaXMgc29tZSBtdWx0aXBsZSBvZiB0aGUgc21hbGxlciB3YXZlLSAKbGVuZ3RocyB3aXRoaW4gaXQsIHRob3VnaCB0aGUgZXhhY3QgcHJvcG9yLSAKdGlvbnMgaGF2ZSBub3QgYXMgeWV0IGJlZW4gY2FsY3VsYXRlZC4gClRoZSBudW1iZXIgb2YgdW5kdWxhdGlvbnMgaXMgZGV0ZXJtaW5lZCAKYnkgdGhlIG51bWJlciBvZiBzcG9rZXMgaW4gdGhlIHdoZWVsLCAKYW5kIHRoZSBzZWNvbmRhcnkgZm9yZWUgd2VhdmVzIGl0c2VsZiB1bmRlciAKYW5kIG92ZXIgdGhlIHJhZGlhdGluZyBjdXJyZW50cyBvZiB0aGUgCnByaW1hcnkganVzdCBhcyBiYXNrZXQtd29yayBtaWdodCBiZSAKd292ZW4gcm91bmQgdGhlIHNwb2tlcyBvZiBhIGNhcnJpYWdlLXdoZWVsLiAK4oCYYmUgd2F2ZS1sZW5ndGhzIGFyZSBpbmZpbml0ZXNpbWFsLCBhbmQgcHJvYmFiLSAKbHkgc29tZSB0aG91c2FuZHMgb2YgdGhlbSBhcmUgaW5jbHVkZWQgCndpdGhpbiBvbmUgb3RmIHRoZSB1bmR1bGF0aW9ucy4gQXMgdGhlIApmb3JjZXMgcnVzaCByb3VuZCBpbiB0aGUgdm9ydGV4LCB0aGVzZSB1bi0gCmR1bGF0aW9ucyBvZiBkaWZmZXJlbnQgc2l6ZXMsIGNyb3NzaW5nIG9uZSAKYW5vdGhlciBpbiB0aGlzIGJhc2tldC13b3JrIHBhdHRlcm4sIHByby0gCmR1Y2UgYW4gYXBwZWFyYW5jZSB3aGljaCBpcyBub3QgaW5hcHRseSAKZGVzY3JpYmVkIGluIHRoZSBIaW5kdSBib29rcyBhcyBfIHJlc2VtYi0gCgoKRk9SQ0UtQ0VOVFJFUyA0NDcgCgoKbGluZyB0aGUgcGV0YWxzIG9mIGEgZmxvd2VyOyBvciBpdCBpcyBzdGlsbCAKbW9yZSBsaWtlIGNlcnRhaW4gc2F1Y2VycyBvciBzaGFsbG93IHZhc2VzIApvZiB3YXZ5IGlyaWRlc2NlbnQgZ2xhc3Mgd2hpY2ggSSBoYXZlIApzZWVuIGluIFZlbmljZS4gQWxsIG9mIHRoZXNlIHVuZHVsYXRpb25zIG9yIApwZXRhbHMgaGF2ZSB0aGF0IHNoaW1tZXJpbmcgaXJpZGVzY2VudCBlZmZlY3QsIApsaWtlICxtb3RoZXItb2YtcGVhcmwsIHlldCBlYWNoIG9mIHRoZW0gaGFzIAp1c3VhbGx5IGl0cyBvd24gcHJlZG9tbWFudCBjb2xvdXIuIAoKSW4gdGhlIG9yZGluYXJ5IG1hbiwgaW4gd2hvbSBfIHRoZXNlIApjZW50cmVzIGFyZSAsanVzdCBhY3RpdmUgZW5vdWdoIHRvIF8gYmUgCmNoYW5uZWxzIGZvciBzdWZmaWNpZW50IGZvcmNlIHRvIGtlZXAgaGlzIGJvZHkgCmFsaXZlLCB0aGVzZSBjb2xvdXJzIGdsb3cgd2l0aCBhIGNvbXBhcmF0aXZlLSAKbHkgZHVsbCBsaWdodDsgYnV0IGluIHRob3NlIGluIHdob20gdGhlIApjZW50cmVzIGhhdmUgYmVlbiBhcm91c2VkIGFuZCBhcmUgaW4gZnVsbCAKYWN0aXZpdHkgdGhleSBhcmUgb2YgYmxpbmRpbmcgYnJpbGhpYW5jeSwgYW5kIAp0aGUgY2VudHJlcyB0aGVtc2VsdmVzLCB3aGljaCBoYXZlIGdyYWR1YWwtIApseSBncm93biBmcm9tIGEgZGlhbWV0ZXIgb2YgYWJvdXQgdHdvIAppbmNoZXMgdG8gdGhlIHNpemUgb2YgYW4gb3JkaW5hcnkgc2F1Y2VyLCBhcmUgCmJsYXppbmcgYW5kIGNvcnVzY2F0aW5nIGxpa2UgbWluaWF0dXJlIHN1bnMuIAoKVGhlIGZpcnN0IGNlbnRyZSwgYXQgdGhlIGJhc2Ugb2YgdGhlIHNwaW5lLCAKaGFzIGEgcHJpbWFyeSBmb3JjZSB3aGljaCByYWRpYXRlcyBvdXQgCmluIGZvdXIgc3Bva2VzLCBhbmQgdGhlcmVmb3JlIGFycmFuZ2VzIAppdHMgdW5kdWxhdGlvbnMgc28gYXMgdG8gZ2l2ZSB0aGUgZWZmZWN0IApvZiBpdHMgYmVpbmcgZGl2aWRlZCBpbnRvIHF1YWRyYW50cywgd2l0aCAKaG9sbG93cyBiZXR3ZWVuIHRoZW0uIFRoaXMgbWFrZXMgaXQgCnNlZW4gYXMgdGhvdWdoIG1hcmtlZCB3aXRoIHRoZSBzaWduIG9mIAp0aGUgY3Jvc3MsIGFuZCBmb3IgdGhhdCByZWFzb24gdGhlIGNyb3NzIGlzIApvZnRlbiB1c2VkIHRvIHN5bWJvbGlzZSB0aGlzIGNlbnRyZSwgYW5kIApzb21ldGltZXMgYSBmbGFtaW5nIGNyb3NzIGlzIHRha2VuIHRvIGluZGktIAoKCjQ0OCBBRFlBUiBUQUxLUyAKCgpjYXRlIHRoZSBzZXJwZW50LWZpcmUgd2hpY2ggcmVzaWRlcyBpbiBpdC4gCldoZW4gYXJvdXNlZCBpbnRvIGZ1bGwgYWN0aXZpdHkgdGhpcyBjZW50cmUgCmlzIGZpZXJ5IG9yYW5nZS1yZWQgaW4gY29sb3VyLCBjb3JyZXNwb25kaW5nIApjbG9zZWx5IHdpdGggdGhlIHR5cGUgb2Ygdml0YWxpdHkgd2hpY2ggMXMgCnNlbnQgZG93biB0byBpdCBmcm9tIHRoZSBzcGxlbmljIGNlbnRyZS4gCkluZGVlZCwgaXQgd2lsbCBiZSBub3RpY2VkIHRoYXQgaW4gdGhlIGNhc2UgCm9mIGV2ZXJ5IG9uZSBvZiB0aGVzZSBjZW50cmVzIGEgc2ltaWxhciAKY29ycmVzcG9uZGVuY2Ugd2l0aCB0aGUgY29sb3VyIG9mIGl0cyB2aXRhbC0gCml0eSBtYXkgYmUgc2Vlbi4gOyAKCuKAmGhlIHNlY29uZCBjZW50cmUsIGF0IHRoZSDigJhuYXZlbCBvciBzb2xhciAKcGxleHVzLCByZWNlaXZlcyBhIHByaW1hcnkgZm9yY2Ugd2l0aCB0ZW4gCnJhZGlhdGlvbnMsIHNvIGl0IHZpYnJhdGVzIGluIHN1Y2ggYSBtYW5uZXIgCmFzIHRvIGRpdmlkZSBpdHNlbGYgaW50byB0ZW4gdW5kdWxhdGlvbnMgb3IgCnBldGFscy4gSXQgaXMgdmVyeSBjbG9zZWx5IGFzc29jaWF0ZWQgd2l0aCAKZmVlbGluZ3MgYW5kIGVtb3Rpb25zIG9mIHZhcmlvdXMga2luZHMuIEl0cyAKcHJlZG9taW5hbnQgY29sb3VyIGlzIGEgY3VyaW91cyBibGVuZGluZyBvZiAKdmFyaW91cyBzaGFkZXMgb2YgcmVkLCB0aG91Z2ggdGhlcmUgaXMgYWxzbyAKYSBncmVhdCBkZWFsIG9mIGdyZWVuIGluIGl0LiAKClRoZSB0aGlyZCBjZW50cmUsIGF0IHRoZSBzcGxlZW4sIGlzIGRldm90ZWQgCnRvIHRoZSBzcGVjaWFsaXNhdGlvbiwgc3ViZGl2aXNpb24gYW5kIGRpc3Blci0gCnNpb24gb2YgdGhlIHZpdGFsaXR5IHdoaWNoIGNvbWVzIHRvIHVzIGZyb20gCnRoZSBzdW4uIFRoYXQgdml0YWxpdHkgaXMgcG91cmVkIG91dCBhZ2FpbiAKZnJvbSBpdCBpbi0gc2l4IGhvcml6b250YWwgc3RyZWFtcywgdGhlIApzZXZlbnRoIHZhcmlldHkgYmVpbmcgZHJhd24gaW50byB0aGUgaHViIApvZiB0aGUgd2hlZWwuIFRoaXMgY2VudHJlIHRoZXJlZm9yZSDigJhoYXMgCnNpeCBwZXRhbHMgb3IgdW5kdWxhdGlvbnMsIGFuZCBpcyBzcGVjaWFsbHkgCnJhZGlhbnQsIGdsb3dpbmcgYW5kIF8gc3VuLWxpa2UuIAoKVGhlIGZvdXJ0aCBjZW50cmUsIGF0IHRoZSBoZWFydCwgaXMgYWxzbyAKCgpGT1JHRS1DRU5UUkVTIDRBUSAKCgpvZiBhIGdsb3dpbmcgZ29sZGVuIGNvbG91ciwgYW5kIGVhY2ggb2YgCml0cyBxdWFkcmFudHMgaXMgZGl2aWRlZCBpbnRvIHRocmVlIHBhcnRzLCAKd2hpY2ggZ2l2ZXMgaXQgdHdlbHZlIHVuZHVsYXRpb25zLCBiZWNhdXNlIAppdHMgcHJpbWFyeSBmb3JjZSBtYWvDqXMgZm9yIGl0IHR3ZWx2ZSBzcG9rZXMuIAoKVGhlIGZpZnRoIGNlbnRyZSwgYXQgdGhlIHRocm9hdCwgaGFzIHNpeHRlZW4gCnNwb2tlcywgYW5kIHRoZXJlZm9yZSBzaXh0ZWVuIGFwcGFyZW50IGRpdmktIApzaW9ucy4gVGhlcmUgaXMgYSBnb29kIGRlYWwgb2YgYmx1ZSBpbiBpdCwgCmJ1dCBpdHMgZ2VuZXJhbCBlZmZlY3QuIGlzIHNpbHZlcnkgYW5kIGdsZWFtLSAKaW5nLCB3aXRoIGEsa2luZCBvZiBzdWdnZXN0aW9uIGFzXyBvZiAKbW9vbmxpZ2h0IHVwb24gcmlwcGxpbmcgd2F0ZXIuIAoKVGhlIHNpeHRoIGNlbnRyZSwgYmV0d2VlbiB0aGUgZXZlYnJvd3MsIApoYXMgdGhlIGFwcGVhcmFuY2Ugb2YgYmVpbmcgZGl2aWRlZCBpbnRvIApoYWx2ZXMsIHRoZSBvbmUgcHJlZG9taW5hbnRseSByb3NlLWNvbG91cmVkLCAKdGhvdWdoIHdpdGggYSBncmVhdCBkZWFsIG9mIHllbGxvdyBhYm91dCBpdCwgCmFuZCB0aGUgb3RoZXIgcHJlZG9taW5hbnRseSBhXyBraW5kIG9mIApwdXJwbGlzaC1ibHVlLCBhZ2FpbiBjbG9zZWx5IGFncmVlaW5nIHdpdGggdGhlIApjb2xvdXJzIG9mIHRoZSBzcGVjaWFsIHR5cGVzIG9mIHZpdGFodHYgdGhhdCAKdml2aWZ5IGl0LiBQZXJoYXBzIGl0IGlzIGZvciB0aGlzIHJlYXNvbiAKdGhhdCB0aGlzIGNlbnRyZSBpcyBtZW50aW9uZWQgaW4gSW5kaWFuIApib29rcyBhcyBoYXZpbmcgb25seSB0d28gcGV0YWxzLCB0aG91Z2ggCmlmIHdlIGFyZSB0byBjb3VudCB1bmR1bGF0aW9ucyBvZiB0aGUgc2FtZSAKY2hhcmFjdGVyIGFzIHRob3NlIG9mIHRoZSBwcmV2aW91cyBjZW50cmVzIAp3ZSBzaGFsbCBmaW5kIHRoYXQgZWFjaCBoYWxmIGlzIHN1YmRpdmlkZWQgCmludG8gZm9ydHktZWlnaHQgb2YgdGhlc2UsIG1ha2luZyBuaW5ldHktc2l4IAppbiBhbGwsIGJlY2F1c2UgaXRzIHByaW1hcnkgZm9yY2UgaGFzIHRoYXQgCm51bWJlciBvZiByYWRpYXRpb25zLiA6IAoKVGhlIHNldmVudGgsIHRoZSBjZW50cmUgYXQgdGhlIHRvcCBvZiAKCgp0aGUgaGVhZCwgaXMgd2hlbiBzdGlycmVkIGludG8gZnVsbCBhY3Rpdml0eSAKNTcgCgoKNC41MCBBRFlBUiBUQUxLUyAKCgpwZXJoYXBzIHRoZSBtb3N0IHJlc3BsZW5kZW50IG9mIGFsbCwgZnVsbCAKb2YgaW5kZXNlcmliYWJsZSBjaHJvbWF0aWMgZWZmZWN0cyBhbmQgdmlicmF0LSAKaW5nIHdpdGggYWxtb3N0IGluY29uY2VpdmFibGUgcmFwaWRpdHkuIEl0IAppcyBkZXNlcmliZWQgaW4gSW5kaWFuIGJvb2tzIGFzIHRob3VzYW5kLSAKcGV0YWxsZWQsIGFuZCByZWFsbHkgdGhpcyBpcyBub3QgdmVyeSBmYXIgCmZyb20gdGhlIHRydXRoLCB0aGUgbnVtYmVyIG9mIHRoZSByYWRpYXRpb25zIApvZiBpdHMgcHJpbWFyeSBmb3JjZSBpbiB0aGUgb3V0ZXIgY2lyY2xlIGJlaW5nIApuaW5lIGh1bmRyZWQgYW5kIHNpeHR5LiBJbiBhZGRpdGlvbiB0byB0aGlzIGl0IApoYXMgYSBmZWF0dXJlIHdoaWNoIGlzIHBvc3NlZ3NlZCBieSAtbm9uZSBvZiAKdGhlIG90aGVyIGNlbnRyZXPigJRhIHNvcnQgb2Ygc3RpYnNpZGlhcnkgd2hpcmwtIApwb29sIG9mIGdsZWFtaW5nIHdoaXRlIGZsdXNoZWQgd2l0aCBnb2xkIGluIAppdHMgaGVhcnTigJRhIG1pbm9yIGFjdGl2aXR5IHdoaWNoIGhhcyB0d2VsdmUgCgoKdW5kdWxhdGlvbnMgb2YgaXRzIG93bi4gCgoKeyBoYXZlIGhlYXJkIGl0IHN1Z2dlc3RlZCB0aGF0IGVhY2ggb2YgCnRoZSDCq2RpZmZlcmVudCBwZXRhbHMgb2YgdGhlc2UgZm9yY2UtY2VudHJlcyAKcmVwcmVzZW50cyBhIG1vcmFsIHF1YWxpdHksIGFuZCB0aGF0IHRoZSAKZGV2ZWxvcG1lbnQgb2YgdGhhdCBxdWFsaXR5IGJyaW5ncyB0aGUgCmNlbnRyZSBpbnRvIGFjdGl2aXR5LiBJIGhhdmUgbm90IHlldCBtZXQgCndpdGggYW55IGZhY3RzIHdoaWNoIGNvbmZpcm0gdGhpcywgbm9yIGFtIAp9IGFibGUgdG8gc2VlIGV4YWN0bHkgaG93IGl0IGNhbiBiZSwgYmVjYXVzZSAKdGhlIGFwcGVhcmFuY2UgMXMgcHJvZHVjZWQgYnkgY2VydGFpbiBxdWl0ZSAKZGVmaW5pdGUgYW5kIGVhc2lseSByZWNvZ25pc2FibGUgZm9yY2VzLCBhbmQgCnRoZSBwZXRhbHMgaW4gYW55IHBhcnRpY3VsYXIgY2VudHJlIGFyZSBlaXRoZXIgCmFjdGl2ZSBvciBub3QgYWN0aXZlIGFjY29yZGluZyBhcyB0aGVzZSAKZm9yY2VzIGhhdmUgb3IgaGF2ZSBub3QgYmVlbiBhcm91c2VkLOKAmSBhbmQgCnRoZWlyIGRldmVsb3BtZW50IHNlZW1zIHRvIG1lIHRvIGhhdmUgCm5vIG1vcmUgY29ubmVjdGlvbiB3aXRoIG1vcmFsaXR5IHRoYW4gCmhhcyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIF8gYmljZXBzLiAKCgpGT1JPRS1DRU5UUkVTIDQ1XSAKCgpJIGhhdmUgY2VydGFpbmx5IG1ldCB3aXRoIHBlcnNvbnMgaW0gCndob20gc29tZSBvZiB0aGUgY2VudHJlcyB3ZXJlIGluIGZ1bGwgCmFjdGl2aXR5LCB0aG91Z2ggdGhlIG1vcmFsIGRldmVsb3BtZW50IHdhcyAKYnkgbm8gbWVhbnMgZXhjZXB0aW9uYWxseSBoaWdoLCB3aGVyZWFzIGltIApvdGhlciBwZXJzb25zIG9mIGhpZ2ggc3Bpcml0dWFsaXR5IGFuZCB0aGUgCm5vYmxlc3QgcG9zc2libGUgbW9yYWxpdHkgdGhlIGNlbnRyZXMgd2VyZSAKbm90IHlldCB2aXRhbGlzZWQgYXQgYWxsLCBzbyB0aGF0IHRoZXJlIGRvZXMgCm5vdCBzZWVtIHRvIG1lIHRvIGJlIGFueSBjb25uZWN0aW9uIGJldHdlZW4gCnRoZSB0d28gZGV2ZWxvcG1ldXRzLiAKCkJlc2lkZXMgdGhlcyBrZWVwaW5nIGFsaXZlIG9mIHRoZSBwaHlzaWNhbCAKdmVoaWNsZSwgdGhlc2UgZm9yY2UtY2VudHJlcyBoYXZlIGFub3RoZXIgCmZ1bmN0aW9uLCB3aGljaCBjb21lcyBpbnRvIHBsYXkgb25seSB3aGVuIAp0aGV5IGFyZSBhd2FrZW5lZCBpbnRvIGZ1bGwgYWN0aXZpdHkuIEhhY2ggCm9mIHRoZXNlIGV0aGVyaWMgY2VudHJlcyBjb3JyZXNwb25kcyB0byBhbiAKYXN0cmFsIGNlbnRyZSwgdGhvdWdoIGFzIHRoZSBhc3RyYWwgY2VudHJlIAppcyBhIHZvcnRleCBpbiBmb3VyIGRpbWVuc2lvbnMgaXQgaGFzIGFuIApleHRlbnNpb24gaW4gYSBkaXJlY3Rpb24gcXVpdGUgZGlmZmVyZW50IGZyb20gCnRoZSBldGhlcmljLCBhbmQgY29uc2VxdWVudGx5IGlzIGJ5IG5vIAptZWFucyBhbHdheXMgY28tdGVybWlub3VzIHdpdGggaXQsIHRob3VnaCAKc29tZSBwYXJ0IGlzIGFsd2F5cyBjb2luY2lkZW50LiDigJhUaGUgZXRoZXJpYyAKdm9ydGV4IGlzIGFsd2F5cyBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZXRoZXJpYyAKYm9keSwgYnV0IHRoZSBhc3RyYWwgY2VudHJlIGlzIGZyZXF1ZW50bHkgcXVpdGUgCmluIHRoZSBpbnRlcmlvciBvZiB0aGF0IHZlaGljbGUuIAoKVGhlIGZ1bmN0aW9uIG9mIGVhY2ggb2YgdGhlc2UgZXRoZXJpYyBjZW4tIAp0cmVzKndoZW4gZnVsbHkgYXJvdXNlZCBpcyB0byBicmluZyBkb3duIGludG8gCnBoeXNpY2FsIGNvbnNjaW91c25lc3Mgd2hhdGV2ZXIgbWF5IGJlIAp0aGUgcXVhbGl0eSBpbmhlcmVudCBpbiB0aGUgYXN0cmFsIGNlbnRyZSAKd2hpY2ggY29ycmVzcG9uZHMgdG8gaXQ7IHNvLCBiZWZvcmUgY2F0YWxvZ3UtIAoKCjQ1MiBBRFlBUiBUQUxLUyAKCgppbmcgdGhlIHJlc3VsdHMgdG8gYmUgb2J0YWluZWQgYnkgYXJvdXNpbmcgdGhlIApldGhlcmljIGNlbnRyZXMgaW50byBhY3Rpdml0eSwgaXQgbWF5IGJlIHdlbGwgdG8gCmNvbnNpZGVyIHdoYXQgaXMgZG9uZSBieSBlYWNoIG9mIHRoZSBhc3RyYWwgCmNlbnRyZXMsIGFsdGhvdWdoIHRoZXNlIGxhdHRlciBhcmUgYWxyZWFkeSBpbSAKZnVsbCBhY3Rpdml0eSBpbiBhbGwgY3VsdHVyZWQgcGVvcGxlIG9mIHRoZSAKbGF0ZXIgcmFjZXMuIFdoYXQgZWZmZWN0LCB0aGVuLCBoYXMgdGhlIApxdWlja2VuaW5nIG9mIGVhY2ggb2YgdGhlc2UgYXN0cmFsIGNlbnRyZXMgCnByb2R1Y2VkIGluIHRoZSBhc3RyYWwgYm9keSA/IAoKVGhlIGZpcnN0IG9mIHRoZXNlIGNlbnRyZXMsIHRoYXQgYXQgdGhlIApiYXNlIG9mIHRoZSBzcGluZSwgaXMgdGhlIGhvbWUgb2YgdGhhdCBteXMtIAp0ZXJpb3VzIGZvcmNlIGNhbGxlZCB0aGUgc2VycGVudC1maXJlIG9yLCBpbiAKVGhlIFZvdHJlIG9mIHRoZSBTZGVuY2UsIHRoZSBXb3JsZOKAmXMgCk1vdGhlci4gSiB3aWxsIHNheSBtb3JlIGFib3V0IHRoaXMgZm9yY2UgCmxhdGVyOyBmb3IgdGhlIG1vbWVudCBKZXQgdXMgY291c2lkZXIg4oCUIGl0cyAKZWZmZWN0cyBvbiB0aGUgYXN0cmFsIGNlbnRyZXMuIFRoaXMgZm9yY2UgCmV4aXN0cyBvbiBhbGwgcGxhbmVzLCBhbmQgYnkgaXRzIGFjdGl2aXR5IHRoZSAKcmVzdCBvZiB0aGUgY2VudHJlcyBhcmUgYXJvdXNlZC4gV2UgbXVzdCAKdGhpbmsgb2YgdGhlIGFzdHJhbCBib2R5IGFzIGhhdmluZyBiZWVuIApvcmlnaW5hbGx5IGF1IGFsbW9zdCBpbmVydCBtYXNzLCB3aXRoIG5vdGhpbmcgCmJ1dCB0aGUgdmFndWVzdCBjb25zY2lvdXNuZXNzLCB3aXRoIG5vIApkZWZpbml0ZSBwb3dlciBvZiBkb2luZyBhbnl0aGluZywgYW5kIG5vIApjbGVhciBrbm93bGVkZ2Ugb2YgdGhlIHdvcmxkIHdoaWNoIHN1ci0gCnJvdW5kZWQgaXQuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGhhcHBlbmVkLCAKdGhlbiwgd2FzIHRoZSBhd2FrZW5pbmcgb2YgdGhhdCBmb3JjZSBpbiAKdGhlIG1hbiBhdCB0aGUgYXN0cmFsIGxldmVsLiBXaGVuIGF3YWstIAplbmVkIGl0IG1vdmVkIG9uIHRvIHRoZSBzZWNvbmQgY2VudHJlLCAKY29ycmVzcG9uZGluZyB0byB0aGUgbmF2ZWwsIGFuZCB2aXZpZmllZCBpdCwgCnRoZXJlYnkgYXdha2VuaW5nIGluIHRoZSBhc3RyYWwgYm9keSB0aGUgCgoKRk9SQ0UtQ0VOVFJFUyA0NTMuIAoKCnBvd2VyIG9mIGZlZWxpbmfigJRhIF8gc2Vuc2l0aXZlbmVzcy0gdG8gYWxsIApzb3J0cyBvZiBpbmZsdWVuY2VzLCB0aG91Z2ggd2l0aG91dCBhcyB5ZXQgCmFueXRoaW5nIGxpa2UgdGhlIGRlZmluaXRlIGNvbXByZWhlbnNpb24gCnRoYXQgY29tZXMgZnJvbSBzZWVpbmcgb3IgaGVhcmluZy4gCgpUaGVuIGl0IG1vdmVkIG9uIHRvIHRoZSB0aGlyZCwgdGhhdCAKY29ycmVzcG9uZGluZyB0byB0aGUgcGh5c2ljYWwgc3BsZWVuLCBhbmQgCnRocm91Z2ggaXQgdml0YWxpc2VkIHRoZSB3aG9sZSBhc3RyYWwgYm9keSwgCmVuYWJsaW5nIHRoZSBwZXJzb24gdG8gdHJhdmVsIGNvbnNjaW91c2x5LCAKdGhvdWdoIHdpdGggOyBvbmx5IGEgdmFndWUgY29uY2VwdGlvbiBhcyAKeWV0IG9mIHdoYXQgLWhlIGVuY291bnRlcmVkIG9uIGhpcyBqb3VybmV5cy4gCgpUaGUgZm91cnRoIGNldXRyZSwgd2hlbiBhd2FrZW5lZCwgZW4tIApkb3dlZCB0aGUgbWFuIHdpdGggdGhlIHBvd2VyIHRvIGNvbS0gCnByZWhlbmQgYW5kIHN5bXBhdGhpc2Ugd2l0aCB0aGUgdmlicmF0aW9ucyAKb2Ygb3RoZXIgYXN0cmFsIGVudGl0aWVzLCBzbyB0aGF0IGhlIGNvdWxkIAppbnN0aW5jdGl2ZWx5IHVuZGVyc3RhbmQgdGhlaSBmZWVsaW5ncy4gCgpUaGUgYXdha2VuaW5nIG9mIHRoZSBmaWZ0aCwgdGhhdCBjb3JyZXMtIApwb25kaW5nIHRvIHRoZSB0aHJvYXQ7IGdhdmUgaGltIHRoZSBwb3dlciAKb2YgaGVhcmluZyBvbiB0aGUgYXN0cmFsIHBsYW5l4oCUdGhhdCBpcyB0byAKc2F5LCAxdCBjYXVzZWQgdGhlIGRldmVsb3BtZW50IG9mIHRoYXQgc2Vuc2UgCndoaWNoIGluIHRoZSBhc3RyYWwgd29ybGQgcHJvZHVjZXMgb24gb3VyIApjb25zY2lvdXNuZXNzIHRoZSBlZmZlY3Qgd2hpY2ggb24gdGhlIHBoeXNpY2FsIApwbGFuZSB3ZSBjYWxsIGhlYXJpbmcuIAoKVGhlIGRldmVsb3BtZW50IG9mIHRoZSBzaXh0aCwgdGhhdCBjb3ItIApyZXNwb25kaW5nIHRvIHRoZSBjZW50cmUgYmV0d2VlbiB0aGUgZXllLSAKYnJvd3MsIGluIGEgc2ltaWxhciBtYW5uZXIgcHJvZHVjZWQgYXN0cmFsIApzaWdodOKAlC10aGUgcG93ZXIgdG8gcGVyY2VpdmUgZGVmaW5pdGVseSB0aGUgCnNoYXBlIGFuZCBuYXR1cmUgb2YgYXN0cmFsIG9iamVjdHMsIG1zdGVhZCBvZiAKdmFndWVseSBzZW5zaW5nIHRoZWlyIHByZXNlbmNlLiAKCgpBNDU0IEFEWUFSIFRBTEtTIAoKClRoZSBhcm91c2luZyBvZiB0aGUgc2V2ZW50aCwgdGhhdCBjb3JyZXMtIApwb25kaW5nIHRvIHRoZSB0b3Agb2YgdGhlIGhlYWQsIHJvdW5kZWQgCm9mZiBhbmQgY29tcGxldGVkIGZvciBoaW0gdGhlIGFzdHJhbCBsaXRlLCAKYW5kIGVuZG93ZWQgaGltIHdpdGggdGhlIHBlcmZlY3Rpb24gb2YgCml0cyBmYWN1bHRpZXMuIAoKV2l0aCByZWdhcmQgdG8gdGhpcyBjZW50cmUgYSBjZXJ0YWluIApkaWZmZXJlbmNlIHNlZW1zIHRvIGV4aXN0IGFjY29yZGluZyB0byB0aGUgCnR5cGUgdG8gd2hpY2ggbWVuIGJlbG9uZy4gRm9yIG1hbnkuIG9mIHVzIAp0aGUgYXN0cmFsIHZvcnRpY2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlLiBzaXh0aCAKYW5kIHNldmVudGggb2YgdGhlc2UgY2VudHJlcyBib3RoIGNvbnZlcmdlIAp1cG9uIHRoZSBwaXR1aXRhcnkgYm9keSwgYW5kIGZvciB0aG9zZSAKcGVvcGxlIHRoZSBwaXR1aXRhcnkgYm9keSBpcyBwcmFjdGljYWxseSB0aGUgCm9ubHkgZGlyZWN0IGxpbmsgYmV0d2VlbiB0aGUgcGh5c2ljYWwgYW5kIAp0aGUgSW5naGVyIHBsYW5lcy4gQW5vdGhlciB0eXBlIG9mIHBlb3BsZSwgCmhvd2V2ZXIsIHdoaWxlIHN0aWxsIGF0dGFjaGluZyB0aGUgc2l4dGggCmNlbnRyZSB0byB0aGUgcGl0dWl0YXJ5IGJvZHksIGJlbmQgb3Igc2xhbnQgCnRoZSBzZXZlbnRoIHVudGlsIGl0cyB2b3J0ZXggY29pbmNpZGVzIHdpdGggCnRoZSBhdHJvcGhpZWQgb3JnYW4gY2FsbGVkIHRoZSBwaW5lYWwgZ2xhbmQsIAp3aGljaCBpcyBieSBwZW9wbGUgb2YgdGhhdCB0eXBlIHZpdmlmaWVkIAphbmQgbWFkZSBpbnRvIGEgbGluZSBvZiBjb21tdW5pY2F0aW9uIApkaXJlY3RseSB3aXRoIHRoZSBsb3dlciBtZW50YWwsIHdpdGhvdXQgCmFwcGFyZW50bHkgcGFzc2luZyB0aHJvdWdoIHRoZSBpbnRlcm1lZGlhdGUgCmFzdHJhbCBwbGFuZSBpbiB0aGUgb3JkaW5hcnkgd2F5LiBJdCB3YXMgCmZvciB0aGlzIHR5cGUgdGhhdCBNYWRhbWUgQmxhdmF0c2t5IHdhcyAKd3JpdGluZyB3aGVuIHNoZSBsYWlkIHN1Y2ggZW1waGFzaXMgdXBvbiAKdGhlIGF3YWtlbmluZyBvZiB0aGF0IG9yZ2FuLiAKClRodXMgdGhlc2UgY2VudHJlcyB0byBzb21lIGV4dGVudCB0YWtlIHRoZSAKcGxhY2Ugb2Ygc2Vuc2Utb3JnYW5zIGZvciB0aGUgYXN0cmFsIGJvZHksIGFuZCAKCgpGT1JDRVItQ0VOVFJFUyBBNUg1IAoKCnlldC4gd2l0aG91dCBwcm9wZXIgcXVhbGlmaWNhdGlvbiB0aGF0LiBleHByZXNzaW9uIAp3b3VsZCBiZSBkZWNpZGVkbHkgwqthIG1pc2xlYWRpbmcgb25lLCBmb3IgCml0IG11c3QgbmV2ZXIgYmUgZm9yZ290dGVuIHRoYXQgdGhvdWdoLCBpbiAKb3JkZXIgdG8gbWFrZSBvdXJzZWx2ZXMgaW50ZWxoZ2libGUsIHdlIApjb25zdGFudGx5IGhhdmUgdG8gc3BlYWsgb2YgYXN0cmFsIHNlZWluZyAKb3IgYXN0cmFsIGhlYXJpbmcsIGFsbCB0aGF0IHdlIHJlYWxseSBtZWFuIApieSB0aG9zZSBleHByZXNzaW9ucyBpcyB0aGUgZmFjdWx0eSBvZiAKcmVzcG9uZGluZyB0bywgc3VjaCB2aWJyYXRpb25zIGFzIGNvbnZleSB0byAKdGhlIG1hbuKAmXMgY29uc2Npb3VzbmVzcywgd2hlbiBoZSBpcyBmdW5lYy0gCnRpb25pbmcgaW4gaGlzIGFzdHJhbCBib2R5LCBpbmZvcm1hdGlvbiBvZiAKdGhlIHNhbWUgY2hhcmFjdGVyIGFzIHRoYXQgY29udmV5ZWQgdG8gaGltIApieSBoaXMgZXllcyBhbmQgZWFycyB3aGlsZSBoZSBpcyBpbiB0aGUgCnBoeXNpY2FsIGJvZHkuIAoKQnV0IGluIHRoZSBlbnRpcmVseSBkaWZmZXJlbnQgYXN0cmFsIApjb3VkaXRpb25zIHNwZWNpYWhzZWQgb3JnYW5zIGFyZSBub3QsIApuZWNlc3NhcnkgZm9yIHRoZSBhdHRhaW5tZW50IG9mIHRoaXMgcmVzdWx0LiAKVGhlcmUgaXMgbWF0dGVyIGluIGV2ZXJ5IHBhcnQgb2YgdGhlIGFzdHJhbCAKYm9keSB3aGljaCBpcyBlYXBhYmxlIG9mIHN1Y2ggcmVzcG9uc2UsIAphbmQgY29uc2VxdWVudGx5IHRoZSBtYW4gXyBmdW5jdGlvbmluZyBtIAp0aGF0IHZlaGljbGUgc2VlcyBlcXVhbGx5IHdlbGwgdGhlIG9iamVjdHMgCmJlaGluZCBoaW0sIGFib3ZlIGhpbSwgYW5kIGJlbmVhdGggaGltLCAKd2l0aG91dCBuZWVkaW5nIHRvIHR1cm4gaGlzIGhlYWQuIFRoZSAKY2VudHJlcywgdGhlcmVmb3JlLCBjYW5ub3QgaGUgZGVzY3JpYmVkIGFzIApvcmdhbnMgaW4gdGhlIG9yZGluYXJ5IHNlbnNlIG9mIHRoZSB3b3JkLCAKc2luY2UgaXQgaXMgbm90IHRocm91Z2ggdGhlbSB0aGF0IHRoZSBtYW4gCnNlZXMgb3IgaGVhcnMsIGFzIGhlIGRvZXMgaGVyZSB0aHJvdWdoIHRoZSAKZXZlcyBhbmQgZWFycy4gWWV0IGl0IGlzIHVwb24gdGhlaXIgdml2aWZpY2EtIAp0aW9uIHRoYXQgdGhlIHBvd2VyIG9mIGV4ZXJjaXNpbmcgdGhlc2UgYXN0cmFsIAoKCkE1RyBBRFlBUiBUQUxLUyAKCgpzZW5zZXMgZGVwZW5kcywgZWFjaCBvZiB0aGVtIGFzIGl0IGlzIGRldmVsb3BlZCAKZ2l2aW5nIHRvIHRoZSB3aG9sZSBhc3RyYWwgYm9keSB0aGUgcG93ZXIgCm9mIHJlc3BvbnNlIHRvIGEgbmV3IHNldCBvZiB2aWJyYXRpb25zLiAKCkFzIGFsbCB0aGUgcGFydGljbGVzIG9mIHRoZSBhc3RyYWwgYm9keSAKYXJlIGNvbnN0YW50bHkgZmxvd2ltZyBhbmQgc3dpcmxpbmcgYWJvdXQgCmxpa2UgdGhvc2Ugb2YgYm9pbGluZyB3YXRlciwgYWxsIG9mIHRoZW0gaW4gCnR1cm4gcGFzcyB0aHJvdWdoIGVhY2ggb2YgdGhlIGNlbnRyZXMgb3IgCnZvcnRpY2VzLCBzbyB0aGF0IGVhY2ggY2VudHJlIGltIGl0cyB0dXJuIApldm9rZXMgaW4gYWxsIHRoZSBwYXJ0aWNsZXMgLW9mIHRoZeKAmCBib2R5IAp0aGUgcG93ZXIgb2YgcmVjZXB0aXZpdHkgdG8gYSBjZXJ0YWluIHNldCBvZiAKdmlicmF0aW9ucywgYW5kIHNvIGFsbCB0aGUgYXN0cmFsIHNlbnNlcyBhcmUgCmVxdWFsbHkgYWN0aXZlIGluIGFsbCBwYXJ0cyBvZiB0aGUgYm9keS4gCkJ1dCBldmVuIHdoZW4gdGhlc2UgYXN0cmFsIHNlbnNlcyBhcmUgZnVsbHkgCmF3YWtlbmVkIGl0IGJ5IG5vIG1lYW5zIGZvbGxvd3MgdGhhdCB0aGUgCm1hbiB3aWxsIGJlIGFibGUgdG8gYnJpbmcgdGhyb3VnaCBpdG8gCmhpcyBwaHlzaWNhbCBib2R5IGFueSBjb25zY2lvdXNuZXNzIG9mIHRoZWlyIAphY3Rpb24uIAoKV2hpbGUgYWxsIHRoaXMgYXN0cmFsIGF3YWtlbmluZyB3YXMgXyB0YWstIAppbmcgcGxhY2UsIHRoZW4sIHRoZSBtYW4gaW4gaGlzIHBoeXNpY2FsIApjb25zY2lvdXNuZXNzIGtuZXcgbm90aGluZyB3aGF0ZXZlciBvZiBpdC4gClRoZSBvbmx5IHdheSBpbiB3aGljaCB0aGUgZGVuc2UgYm9keSBjYW4gCmJlIGJyb3VnaHQgdG8gc2hhcmUgYWxsIHRoZXNlIGFkdmFudGFnZXMgCmlzIGJ5IHJlcGVhdGluZyB0aGF0IHByb2Nlc3Mgb2YgYXdha2VuaW5nIAp3aXRoIHRoZSBldGhlcmljIGNlbnRyZXMuIFRoYXQgaXMgdG8gYmUgCmFjaGlldmVkIHByZWNpc2VseSBpbiB0aGUgc2FtZSB3YXkgYXMgaXQgCndhcyBkb25lIHVwb24gdGhlIGFzdHJhbCBwbGFuZeKAlHRoYXQgaXMgdG8gCnNheSwgYnkgdGhlIGFyb3VzaW5nIG9mIHRoZSBzZXJwZW50LWZpcmUsIAp3aGljaCBleGlzdHMgY2xvdGhlZCBpbiBldGhlcmljIG1hdHRlciBvbiAKCgpGT1JPRS1DRU5UUkVTIDQ1NyAKCgp0aGUgcGh5c2ljYWwgcGxhbmUsIGFuZCBzbGVlcHMgaW4gdGhlIGNvcnJlcy0gCnBvbmRpbmcgZXRoZXJpYyBjZW50cmUsIHRoYXQgYXQgdGhlIGJhc2UgCm9mIHRoZSBzcGluZS4gCgpJbiB0aGlzIGNhc2UgdGhlIGFyb3VzaW5nIGlzIGRvbmUgYnkgYSAKZGV0ZXJtaW5lZCBhbmQgbG9uZy1jb250aW51ZWQgZWZmb3J0IG9mIHRoZSAKd2lsbCwtYW5kIHRvIGJyaW5nIHRoYXQgZmlyc3QgY2VudHJlIGludG8gZnVsbCAKYWN0aXZpdHkgaXMgcHJlY2lzZWx5IHRvIGF3YWtlbiB0aGUgc2VycGVudC0gCmZpcmUuIFdoZW4gb25jZSB0aGF0IGlzIGFyb3VzZWQsIGl0IGlzIGJ5IAppdHMgdHLDqW1lbmRvdXMgZm9yY2UgdGhhdCB0aGUgb3RoZXIgY2VudHJlcyAKYXJlIHZpdmlmaWVkLiBJdHMgZWZmZWN0IG9uIHRoZSBvdGhlciBldGhlcmljIApjZW50cmVzIGlzIHRvIGJyaW5nIGludG8gdGhlIHBoeXNpY2FsIGNvbi0gCnNjaW91c25lc3MgdGhlIHBvd2VycyB3aGljaCB3ZXJlIGFyb3VzZWQgCmJ5IHRoZSBkZXZlbG9wbWVudCBvZiB0aGVpciBjb3JyZXNwb25kaW5nIAphc3RyYWwgY2VudHJlcy4gCgpXaGVuIHRoZSBzZWNvbmQgb2YgdGhlIGV0aGVyaWMgY2VudHJlcywgCnRoYXQgYXQgdGhlIG5hdmVsLCBjb21lcyBpbnRvIGFldGl2aXR5IHRoZSAKbWFuIGJlZ2lucyBpbiB0aGUgcGh5c2ljYWwgYm9keSB0byBiZSBjb25zY2lvdXMgCm9mIGFsbCBraW5kcyBvZiBhc3RyYWwgaW5mbHVlbmNlcywgdmFndWVseSBmZWVsLSAKaW5nIHRoYXQgc29tZSBvZiB0aGVtIGFyZSBmcmllbmRseSBhbmQgb3RoZXJzIApob3N0aWxlLCBvciB0aGF0IHNvbWUgcGxhY2VzIGFyZSBwbGVhc2FudCAKYW5kIG90aGVycyB1bnBsZWFzYW50LCB3aXRob3V0IGluIHRoZSBsZWFzdCAKa25vd2luZyB3aHkuIAoKV2hlbiB0aGUgdGhpcmQgY2VudHJlLCB0aGF0IGF0IHRoZSBzcGxlZW4sIAppcyBhd2FrZW5lZCwgdGhlIG1hbiAxcyBlbmFibGVkIHRvIHJlbWVtLSAKYmVyIGhpcyB2YWd1ZSBhc3RyYWwgam91cm5leXMsIHRob3VnaCBzb21lLSAKdGltZXMgb25seSB2ZXJ5IHBhcnRpYWxseS4gVGhlIGVmZmVjdCBvZiBhIApzbGlnaHQgYW5kIGFjY2lkZW50YWwgc3RpbXVsYXRpb24gb2YgdGhpcyAKY2VudHJlIGlzIG9mdGVuIHRvIHByb2R1Y2UgaGFsZi1yZW1lbWJyYW5jZSAKCjU4IAoKCjQuNTggQURZQVIgVEFMS1MgCgoKb2YgYSBibGlzc2Z1bCBzZW5zYXRpb24gb2YgZmx5bWcgdGhyb3VnaCAKdGhlIGFpci4gfCAKClN0aW11bGF0aW9uIG9mIHRoZSBmb3VydGgsIHRoYXQgYXQgdGhlIApoZWFydCwgbWFrZXMgdGhlIG1hbiBpbnN0aW5jdGl2ZWx5IGF3YXJlIG9mIAp0aGUgam95cyBhbmQgc29ycm93cyBvZiBvdGhlcnMsIGFuZCBzb21lLSAKdGltZXMgZXZlbiBjYXVzZXMgaGltIHRvIHJlcHJvZHVjZSBpbiwgaGltLSAKc2VsZiBieSBzeW1wYXRoeSB0aGVpciBwaHlzaWNhbCBhY2hlcyBhbmQgCnBhaW5zLCA7IAoKVGhlIGFyb3VzaW5nIG9mIHRoZSBmaWZ0aCwgdGhhdCA6YXQgdGhlIAp0aHJvYXQsIGVuYWJsZXMgaGltIHRvIGhlYXIgdm9pY2VzLCB3aGljaCAKc29tZXRpbWVzIG1ha2UgYWxsIGtpbmRzIG9mIHN1Z2dlc3Rpb25zIC4gdG8gCmhpbS4gQWxzbyBzb21ldGltZXMgaGUgaGVhcnMgbXVzaWMsIG9yIApvdGhlciBsZXNzIHBsZWFzYW50IHNvdW5kcy4gV2hlbiBpdCBpcyBmdWxseSAKd29ya2luZyBpdCBtYWtlcyB0aGUgbWFuIGNsYWlyYW5kaWVudCBhcyAKZmFyIGFzIHRoZSBldGhlcmljIGFuZCBhc3RyYWwgcGxhbmVzIGFyZSAKY29uY2VybmVkLiAKCldoZW4gdGhlIHNpeHRoLCBiZXR3ZWVuIHRoZSBleWUtYnJvd3MsIApiZWNvbWVzIHZpdmlmaWVkLCB0aGUgbWFuIGJlZ2lucyB0byBzZWUgCnRoaW5ncywgdG8gaGF2ZSB2YXJpb3VzIHNvcnRzIG9mIHdha2luZyAKdmlzaW9ucywgc29tZXRpbWVzIG9mIHBsYWNlcywgc29tZXRpbWVzIG9mIApwZW9wbGUuIEluIGl0cyBlYXJoZXIgZGV2ZWxvcG1lbnQsIHdoZW4gCml0IGlzIG9ubHkganVzdCBiZWdpbm5pbmcgdG8gYmUgYXdha2VuZWQsIAppdCBvZnRlbiBtZWFucyBub3RoaW5nIG1vcmUgdGhhbiBoYWxmLXNlZWluZyAKbGFuZHNjYXBlcyBhbmQgY2xvdWRzIG9mIGNvbG91ci4gVGhlIGZ1bGwgCmFyb3VzaW5nIG9mIHRoaXMgYnJpbmdzIGFib3V0IGNsYWlydm95YW5jZS4gCgpUaGUgY2VudHJlIGJldHdlZW4gdGhlIGV5ZS1icm93cyBpcyBjb24tIApuZWN0ZWQgd2l0aCBzaWdodCBpbiB5ZXQgYW5vdGhlciB3YXkuIEl0IAppcyB0aHJvdWdoIGl0IHRoYXQgdGhlIHBvd2VyIG9mIG1hZ25pZmktIAoKCkZPUkNFLUNFTlRSRVMgNDU5IAoKCmNhdGlvbiBvZiBtaW51dGUgcGh5c2ljYWwgb2JqZWN0cyBpcyBleGVyLSAKY2lzZWQuIEEgdGlueSBmbGV4aWJsZSB0dWJlIG9mIGV0aGVyaWMgbWF0LSAKdGVyIGlzIHByb2plY3RlZCBmcm9tIHRoZSBjZW50cmUgb2YgaXQsIApyZXNlbWJsaW5nIGEgbWljcm9zY29waWMgc25ha2Ugd2l0aCBhbiAKZXllIGF0IHRoZSBlbmQgb2YgaXQuIFRoaXMgaXMgdGhlIHNwZWNpYWwgCm9yZ2duIHVzZWQgaW4gdGhhdCBmb3JtIG9mIGNsYWlydm95YW5jZSwgCmFuZCB0aGUgZXllIGF0IHRoZSBlbmQgb2YgaXQgY2FuIF8gYmUgCmV4cGFuZGVkIG9yIGNvbnRyYWN0ZWQsIHRoZSBlZmZlY3QgYmVpbmcgCnRvIGNoYW5nZSB0aGUgcG93ZXIgb2YgbWFnbmlmaWNhdGlvbiBhYy0gCmNvcmRpbmcgdG8g4oCYdGhlIHNpemUgb2YgdGhlIG9iamVjdCB3aGljaCAKaXMgYmVpbmcgZXhhbWluZWQuIFRoaXMgaXMgd2hhdCBpcyBtZWFudCBpbiAKYW5jaWVudCBib29rcyB3aGVuIG1lbnRpb24gMXMgbWFkZSBvZiB0aGUgY2EtIApwYWNpdHkgdG8gbWFrZSBvbmVzZWxmIGxhcmdlIG9yIHNtYWxsIGF0IHdpbGwuIArigJhsJ28gZXhhbWluZSBhbiBhdG9tIG9uZSBkZXZlbG9wZXMgYW4gb3JnYW4gb2YgCnZpc2lvbiBjb21tZW5zdXJhdGUgaW4gc2l6ZSB3aXRoIHRoZSBhdG9tLiAKVGhpcyBsaXR0bGUgc25ha2UgcHJvamVjdGluZyBmcm9tIHRoZSBjZW50cmUgCm9mIHRoZSBmb3JlaGVhZCB3YXMg4oCYc3ltYm9saXNlZCB1cG9uIHRoZSAKaGVhZC1kcmVzcyBvZiB0aGUgUGhhcmFvaCBvZiBFZ3lwdCwgd2hvIAphcyB0aGUgY2hpZWYgcHJpZXN0IG9mIGhpcyBjb3VudHJ5IHdhcyBzdXAtIApwb3NlZCB0byBwb3NzZXNzIHRoaXMgYW1vbmcgbWFueSBvdGhlciAKb2NjdWx0LiBwb3dlcnMuIHJlIGU6IArigJhXaGVuIHRoZSBzZXZlbnRoIGNlbnRyZSBpcyBhd2FrZW5lZCB0aGUgCm1haSBpcyBhYmxlIGJ5IHBhc3NpbmcgdGhyb3VnaCBpdCB0byBsZWF2ZSBoaXMgCmJvZHkgaW4gZnVsbCBjb25zY2lvdXNuZXNzLCBhbmQgYWxzbyB0byByZXR1cm4gCnRv4oCZIGl0IHdpdGhvdXQgdGhlIHVzdWFsIGJyZWFrLCBzbyB0aGF0IElyaXMgCmNvbnNjaW91c25lc3Mgd2lsbCBiZSBjb250aW51b3VzIHRocm91Z2ggCm5pZ2h0IGFuZCBkYXkuIFdoZW4gdGhlIGZpcmUgaGFzIGJlZW4gCnBhc3NlZCB0aHJvdWdoIGFsbCB0aGVzZSBjZW50cmVzIGluIGEgCgoKQTQ2MCBBRFlBUiDigJhUQUxLUyAKCgpjZXJ0YWluIG9yZGVyICh3aGljaCB2YXJpZXMgZm9yIGRpZmZlcmVudCB0eXBlcyAKb2YgcGVvcGxlKSB0aGUgY29uc2Npb3VzbmVzcyBiZWNvbWVzIGNvbnRpbnUtIApvdXMgdXAgdG8gdGhlIGVudHJ5IGludG8gdGhlIGhlYXZlbi13b3JsZCAKYXQgdGhlIGVuZCBvZiB0aGUgbGlmZSBvbiB0aGUgYXN0cmFsIHBsYW5lLCAKbm8gZGlmZmVyZW5jZSBiZWluZyBtYWRlIGJ5IGVpdGhlciB0aGUgdGVtLSAKcG9yYXJ5IHNlcGFyYXRpb24gZnJvbSB0aGUgcGh5c2ljYWwgYm9keSAKZHVyaW5nIHNsZWVwIG9yIHRoZSBwZXJtYW5lbnQgZGl2aXNpb24gYXQgCmRlYXRoLiB8IAoKQmVmb3JlIHRoaXMgaXMgZG9uZSwgaG93ZXZlciwgdGhlLiBtYW4gCm1heSBoYXZlIG1hbnkgZ2xpbXBzZXMgb2YgdGhlIGFzdHJhbCAKd29ybGQsIGZvciBzcGVjaWFsbHkgc3Ryb25nIHZpYnJhdGlvbnMgbWF5IAphdCBhbnkgdGltZSBnYWx2YW5pc2Ugb25lIG9yIG90aGVyIG9mIHRoZSAKY2VudHJlcyBpbnRvIHRlbXBvcmFyeSBhY3Rpdml0eSwgd2l0aG91dCBhcm91cy0gCmludiB0aGUgc2VycGVudC1maXJlIGF0IGFsbDsgb3IgaXQgbWF5IApoYXBwZW4gdGhhdCB0aGUgZmlyZSBtYXkgYmUgcGFydGlhbGx5IHJvdXNlZCwgCmFuZCBpbiB0aGlzIHdheSBhbHNvIHBhcnRpYWwgY2xhaXJ2b3lhbmNlIMKpIAptYXkgYmUgcHJvZHVjZWQgZm9yIHRoZSB0aW1lLiBGb3IgdGhpcyAKZmlyZSBleGlzdHMgaW4gc2V2ZW4gbGF5ZXJzIG9yIHNldmVuIGRlZ3JlZXMgCm9mIGZvcmNlLCBhbmQgaXQgb2Z0ZW4gaGFwcGVucyB0aGF0IGEgbWFuIAp3aG8gZXhlcnRzIGhpcyB3aWxsIGluIHRoZSBlZmZvcnQgdG8gYXJvdXNlIAppdCBtYXkgc3VjY2VlZCBpIGFmZmVjdGluZyBvbmUgbGF5ZXIgb25seSwgCmFuZCBzbyB3aGVuIGhlIHRoaW5rcyB0aGF0IGhlIGhhcyBkb25lIAp0aGUuIHdvcmsgaGUgbWF5IGZpbmQgaXQgaW5lZmZlY3RpdmUsIGFuZCAKbWF5IGhhdmUgdG8gZG8gaXQgYWxsIG92ZXIgYWdhaW4gbWFueSB0aW1lcywgCmRpZ2dpbmcgZ3JhZHVhbGx5IGRlZXBlciBhbmQgZGVlcGVyLCB1bnRpbCAKbm90LiBvbmx5IHRoZSBzdXJmYWNlIGlzIHN0aXlyZWQgYnV0IHRoZSB2ZXJ5IApoZWFydCBvZiB0aGUgZmlyZSBpcyBpbiBmdWxsIGFjdGl2aXR5LiAKCgpUSEUgU0VSUEVOVC1GSVJFIDQ2MSAKCgpUSGUgU0VSUEVOVC0gRklSRSAKCgpBcyB3ZSBrbm93IGl0LCB0aGlzIHNlcnBlbnQtZmlyZSAoY2FsbGVkIAppbiBTYW5za3JpdCBrdW5kYWxpbmkpIGlzIHRoZSBtYW5pZmVzdGF0aW9uIApvbiB0aGUgcGh5c2ljYWwgcGxhbmUgb2Ygb25lIG9mIHRoZSBncmVhdCAKd29ybGQtZm9yY2Vz4oCUb25lIG9mIHRoZSBwb3dlcnMgb2YgdGhlIApMb2Nvcy4gKllvdSBrbm93IHRoYXQgd2hhdCB3ZSBjYWxsIAplbGVjdHJpY2l0eSBpcyBhIG1hbmlmZXN0YXRpb24gb2Ygb25lIG9mIApIaXMgZm9yY2VzLCBfIGFuZCB0aGF0IHRoYXQgZm9yY2UgbWF5IAp0YWtlIHZhcmlvdXMgZm9ybXMsIHN1Y2ggYXMgaGVhdCwgbGlnaHQgYW5kIAptb3Rpb24uIEFub3RoZXIgb2YgSGlzIGZvcmNlcyBpcyB2aXRhbGl0eeKAlCAKd2hhdCBpcyBzb21ldGltZXMgY2FsbGVkIHByYW5hLCBidXQgdGhpcyBpcyAKbm90IGludGVyY2hhbmdlYWJsZSB3aXRoIGFueSBvZiB0aG9zZSBvdGhlciAKZm9ybXMgd2hpY2ggd2UgaGF2ZSBqdXN0IG1lbnRpb25lZC4gV2UgCm1heSBzYXkgdGhlbiB0aGF0IHZpdGFsaXR5IGFuZCBlbGVjdHJpY2l0eSAKYXJlIGFzIGl0IHdlcmUgdGhlIGxvd2VyIGVuZHMgb2YgdHdvIG9mIApIaXMgc3RyZWFtcyBvZiBmb3JjZS4gCgpUaGlzIHNlcnBlbnQtZmlyZSBtYXkgYmUgdGFrZW4gYXMgdGhlIApsb3dlciBlbmQgb2YgYW5vdGhlciBvZiBIaXMgc3RyZWFtcywgdGhlIApwaHlzaWNhbC1wbGFuZSBtYW5pZmVzdGF0aW9uIG9mIGFub3RoZXIgb2YgCnRoZSBtYW5pZm9sZCBhc3BlY3RzIG9mIEhpcyBwb3dlci4gTGlrZSAKdml0YWxpdHksIGl0IGV4aXN0cyBvbiBhbGwgcGxhbmVzIG9mIHdoaWNoIHdlIAprbm93IGFueXRoaW5nOyBidXQgaXQgaXMgdGhlIGV4cHJlc3Npb24gCm9mIGl0IG0gZXRoZXJpYyBtYXR0ZXIgd2l0aCB3aGljaCB3ZSBoYXZlIAp0byAqZG8uIEl0IGlzIG5vdCBjb252ZXJ0aWJsZSBpdG8gZWl0aGVyIAp2aXRhbGl0eSBvciBlbGVjdHJpY2l0eSwgYW5kIGRvZXMgbm90IHNlZW0gCnRvIGJlIGFmZmVjdGVkIGluIGFueS4gd2F5IGJ5IGVpdGhlci4gSSBoYXZlIApzZWVuIGFzIG11Y2ggYXMgYSBtaWxsaW9uIGFuZCBhIHF1YXJ0ZXIgCgoKNDYyIEFEWUFSIOKAmFRBTEtTIAoKCnZvbHRzIG9mIGVsZWN0cmljaXR5IHB1dCBpbnRvIGEgaHVtYW4gYm9keSwgCnNvIHRoYXQgd2hlbiB0aGUgbWFuIGhlbGQgb3V0IGhpcyBhcm0gCnRvd2FyZHMgdGhlIHdhbGwgaHVnZSBmbGFtZXMgcnVzaGVkIG91dCAKZnJvbSBoaXMgZmluZ2VycywgeWV0IGhlIGZlbHQgbm90aGluZyB1bi0gCnVzdWFsLCBub3Igd2FzIGhlIGluIHRoZSBsZWFzdCBidXJudCB1bi0gCmxlc3MgaGUgYWNjaWRlbnRhbGx5IHRvdWNoZWQgc29tZSBleHRlcm5hbCAKb2JqZWN0OyBidXQgZXZlbiB0aGlzIGVub3Jtb3VzIGRpc3BsYXkgb2YgCnBvd2VyIGhhZCBubyBlZmZlY3Qgd2hhdGV5ZXIgdXBvbiB0aGUgCnNlcnBlbnQtZmlyZS4gNiAKCkluIFVoIFZvaWNlIG9vZiB0aGUg4oCYIE5pbGVuY2Ug4oCUIHRoaXMgCmZvcmNlIGlzIGNhbGxlZCDigJh0aGUgRmllcnkgUG93ZXLigJkgYW5kIArigJh0aGUgV29ybGTigJlzIE1vdGhlci4gVGhlcmUgaXMgaW51Y2ggCnJlYXNvbiBmb3IgYWxsIHRoZXNlIHN0cmFuZ2UgbmFtZXMsIGZvciBpdCAKaXMgaW4gdmVyeSB0cnV0aCBoa2UgaHF1aWQgZmlyZSBhcyBpdCBydXNoLSAKZXMgdGhyb3VnaCB0aGUgYm9keSwgYW5kIHRoZSBjb3Vyc2UgdGhyb3VnaCAKd2hpY2ggaXQgb3VnaHQgdG8gbW92ZSBpcyBhIHNwaXJhbCBvbmUgbGlrZSAKdGhlIGNvaWxzIG9mIGEgc2VycGVudC4gSXQgaXMgY2FsbGVkIHRoZSAKV29ybGTigJlzIE1vdGhlciBiZWNhdXNlIHRocm91Z2ggaXQgb3VyIAp2YXJpb3Vz4oCZIHZlaGljbGVzIG1heSBiZSB2aXZpZmllZCwgc28gdGhhdCAKdGhlIGhpZ2hlciB3b3JsZHMgbWF5IG9wZW4gYmVmb3JlIHVzIGluIApzdWNjZXNzaW9uLiAzIAoKSW7CqyB0aGUgYm9keSBvZiBtYW4gaXRzIGhvbWUsIGFzIHdlIGhhdmUgCnNhaWQsIGlzIGF0IHRoZSBiYXNlIG9mIHRoZSBzcGluZSwgYW5kIGZvciB0aGUgCm9yZGluYXJ5IHBlcnNvbiBpdCBoZXMgdGhlcmUgdW5hd2FrZW5lZCwgCmFuZCBpdHMgdmVyeSBwcmVzZW5jZSB1bnN1c3BlY3RlZCwgZHVyaW5nIAp0aGUgd2hvbGUgb2YgaGlzIGxpdGU7IGFuZCBpdCBpcyBpbmRlZWQgZmFyIApiZXR0ZXIgdG8gYWxsb3cg4oCYaXQgdGh1cyB0byByZW1haW4gZG9ybWFudCAKdW50aXTigJkgdGhlIG1hbiBoYXMgbWFkZSBkZWZpbml0ZSBtb3JhbCAKCgpUSEUgU0VSUEVOVC1GSVJFIDQ2MiAKCgpkZXZlbG9wbWVudCwgdW50aWwgaGlzIHdpbGwgaXMgc3Ryb25nIGVub3VnaCAKdG8gY29udHJvbCBpdCBhbmQgaGlzIHRob3VnaHRzIHB1cmUgZW5vdWdoIAp0byBlbmFibGUgaGltIHRvIGZhY2UgaXRzIGF3YWtlbmluZyB3aXRoLSAKb3V0IGluanVyeS4gTm8gb25lIHNob3VsZCBleHBlcmltZW50IHdpdGggCml0IHdpdGhvdXQgZGVmaW5pdGUgaW1zdHJ1Y3Rpb24gZnJvbSBhIHRlYWNoZXIgCndobyAsdGhvcm91Z2hseSB1bmRlcnN0YW5kcyB0aGUgc3ViamVjdCwgZm9yIAp0aGUgZGF0aWdlcnMgY29ubmVjdGVkIHdpdGggaXQgYXJlIHZlcnkgCnJlYWwgYW5kIHRlcnJpYmx5IHNlcmlvdXMuIFNvbWUgb2YgdGhlbSAKYXJlIHB1cmVseSBwaHlzaWNhbC4gSXRzIHVuY29udHJvbGxlZCBtb3ZlLSAKbWVudCBvZnRlbiDigJhwcm9kdWNlcyBpbnRlbnNlIHBoeXNpY2FsIHBhaW4sIAphbmQgaXQgbWF5IHJlYWRpbHkgdGVhciB0aXNzdWVzIGFuZCAKZXZlbiBkZXN0cm95IHBoeXNpY2FsIGhmZS4gVGhpcywgaG93ZXZlciwgCmlzIHRoZSBsZWFzdCBvZiB0aGUgZXZpbHMgb2Ygd2hpY2ggaXQgaXMgCmNhcGFibGUsIGZvciBpdCBtYXkgZG8gcGVybWFuZW50IGluanVyeSAKdG8gdmVoaWNsZXMgaGlnaGVyIHRoYW4gdGhlIHBoeXNpY2FsLiAKCk9uZSB2ZXJ5IGNvbW1vbiBlZmZlY3Qgb2Ygcm91c2luZyBpdCBwcmUtIAptYXR1cmVseSBpcyB0aGF0IGl0IHJ1c2hlcyBkb3dud2FyZHMgaW4gCnRoZSBib2R5IGluc3RlYWQgb2YgdXB3YXJkcywgYW5kIF8gdGh1cyAKZXhjaXRlcyB0aGUgbW9zdCB1bmRlc2lyYWJsZSBwYXNzaW9uc+KAlGV4Y2l0ZXMgCnRoZW0gYW5kIGludGVuc2lmaWVzIHRoZWlyIGVmZmVjdHMgdG8gc3VjaCAKYSBkZWdyZWUgdGhhdCBpdCBiZWNvbWVzIGFic29sdXRlbHkgaW0tIApwb3NzaWJsZSBmb3IgdGhlIG1hbiB0byByZXNpc3QgdGhlbSwgYmVjYXVzZSBhIApmb3JjZSBoYXMgYmVlbiBicm91Z2h0IGludG8gcGxheSBpbiB3aG9zZSAKcHJlc2VuY2UgaGUgaXMgYXNfIGhlbHBsZXNzIGFzIGEgc3dpbW1lciAKYmVmb3JlIHRoZSBqYXdzIG9mIGEgc2hhcmsuIFN1Y2ggbWVuIApiZWNvbWUgc2F0eXJzLCBtb25zdGVycyBvZiBkZXByYXZpdHksIGJlLSAKY2F1c2UgdGhleSBhcmUgaW4gdGhlIGdyYXNwIG9mIGEgZm9yY2Ugd2hpY2ggCmlzIG91dCBvZiBhbGwgcHJvcG9ydGlvbiB0byB0aGUgb3JkaW5hcnkgCgoKNC41NCwgQURZQVIgVEFMS1MgCgoKaHVtYW4gcG93ZXIgb2YgcmVzaXN0YW5jZS4gVGhleSBtYXkgCnByb2JhYmx5IGdhaW4gY2VydGFpbiBzdXBlcm5vcm1hbCBwb3dlcnMsIApidXQgdGhlc2Ugd2lsbCBiZSBzdWNoIGFzIHdpbGwgYnJpbmcgCnRoZW0gaW50byB0b3VjaCB3aXRoIGEgbG93ZXIgb3JkZXIgb2YgCmV2b2x1dGlvbiB3aXRoIHdoaWNoIGh1bWFuaXR5IGlzIGludGVuZGVkIAp0byBob2xkIG5vIGNvbW1lcmNlLCBhbmQgdG8gZXNjYXBlIC1mcm9tIAppdHMgYXdmdWwgdGhyYWxkb20gbWF5IHRha2UgdGhlbSBtb3JlIAp0aGFuIG9uZSBpbmNhcm5hdGlvbi4gfCBhbSwgbm90IG09IGFueSAKd2F5IGV4YWdnZXJhdGluZyB0aGUgaG9ycm9yIG9mIHRoaXMg4oCYdGhpbmcsIAphcyBhIHBlcnNvbiB0byB3aG9tIGl0IHdhcyBhbGwgYSBtYXR0ZXIgCm9mIGhlYXJzYXkgbWlnaHQgdW53aXR0aW5nbHkgZG8uIEkgaGF2ZSAKbXlzZWxmIGJlZW4gY29uc3VsdGVkIGJ5IHBlb3BsZSB1cG9uIHdob20gCnRoaXMgYXdmdWwgZmF0ZSBoYXMgYWxyZWFkeSBjb21lLCBhbmQgSSAKaGF2ZSBzZWVuIHdpdGggbXkgb3duIGV5ZXMgd2hhdCBoYXBwZW5lZCAKdG8gdGhlbS4gVGhlcmUgaXMgYSBzY2hvb2wgb2YgYmxhY2sgbWFnaWMgCndoaWNoIHB1cnBvc2VseSB1c2VzIHRoaXMgcG93ZXIgaW4gdGhpcyB3YXksIAppbiBvcmRlciB0aGF0IHRocm91Z2ggaXQgbWF5IGJlIHZpdmlmaWVkIAp0aG9zZSBsb3dlciBmb3JjZS1jZW50cmVzIHdoaWNoIGFyZSBuZXZlciAKdXNlZCBieSB0aGUgZm9sbG93ZXJzIG9mIHRoZSBHb29kIExhdy4gCkt2ZW4gYXBhcnQgZnJvbSB0aGlzIGdyZWF0ZXN0IG9mIGl0cyAKZGFuZ2VycywgaXRzIHByZW1hdHVyZSB1bmZvbGRtZW50IGhhcyBtYW55IApvdGhlciB1bnBsZWFzYW50IHBvc3NpYmlsaXRpZXMuIEl0IGludGVuc2lmaWVzIApldmVyeXRoaW5nIGluIHRoZSBtYW7igJlzIG5hdHVyZSwgYW5kIGl0IHJlYWNoLSAKZXMgdGhlIGxvd2VyIGFuZCBldmlsIHF1YWxpdGllcyBtb3JlIHJlYWRpbHkgCnRoYW4gdGhlIGdvb2QuIEluIHRoZSBtZW50YWwgYm9keSwgZm9yIApleGFtcGxlLCBhbWJpdGlvbiBpcyB2ZXJ5IHJlYWRpbHkgYXJvdXNlZCwgCmFuZCBzb29uIHN3ZWxscyB0byBhbiBpbmNyZWRpYmx5IGlub3JkaW5hdGUgCmRlZ3JlZS4gSXQgd291bGQgYmUgaGtlbHkgdG8gYnJpbmcgd2l0aCBpdCAKCgrCqyBUSEUgU0VSUEVOVC1GSVJFIDQ2NSAKCgphIGdyZWF0IGludGVuc2lmaWNhdGlvbiBvZiB0aGUgcG93ZXIgb2YgaW1udGVsLSAKbGVjdCwgYnV0IGF0IHRoZSBzYW1lIHRpbWUgaXQgd291bGQgcHJvLSAKZHVjZSBhYm5vcm1hbCBhbmQgc2F0YW5pYyBwcmlkZSwgc3VjaCBhcyBpcyAKcXVpdGUgaW5jb25jZWl2YWJsZSB0byB0aGUgb3JkaW5hcnkgbWFuLiBJdCAKaXMgbm90IHdpc2UgZm9yIGEgbWFuIHRvIHRoaW5rIHRoYXQgaGUgaXMgCnByZXBhcmVkIHRvIGNvcGUgd2l0aCBhbnkgZm9yY2UgdGhhdCBtYXkgCmFyaXNlIHdpdGhpbiBoaXMgYm9keTsgdGhpcyBpcyBubyBvcmRpbmFyeSAKZm9yY2UsIGJ1dCBzb21ldGhpbmcgcmVzaXN0bGVzcy4gQXNzdXJlZGx5IApubyB3bW5pbnN0cnVjdGVkIG1hbiBzaG91bGQgZXZlciB0cnkgdG8gCmF3YWtlbiBpdCwg4oCYYW5kIGlmIHN1Y2ggYW4gb25lIGZpbmRzIHRoYXQgCml0IGhhcyBiZWVuIGFyb3VzZWQgYnkgYWNjaWRlbnQgaGUgc2hvdWxkIAphdCBvbmNlIGNvbnN1bHQgc29tZSBvbmUgd2hvIGZ1bGx5IHVuZGVyLSAKc3RhbmRzIHRoZXNlIG1hdHRlcnMuIAoKSXQgbWF5IGJlIG5vdGljZWQgdGhhdCBJIGhhdmUgc3BlY2lhbGx5IAphbmQgaW50ZW50aW9uYWxseSByZWZyYWluZWQgZnJvbSBleHBsYWluaW5nIApob3cgdGhpcyBhcm91c2luZyBpcyB0byBiZSBkb25lLCBvciBtZW4tIAp0aW9uaW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZm9yY2UgKHdoZW4gCmFyb3VzZWQpIHNob3VsZCBiZSBwYXNzZWQgdGhyb3VnaCB0aGVzZSAKdmFyaW91cyBjZW50cmVzLCBmb3IgdGhhdCBzaG91bGQgYnkgbm8gbWVhbnMgCmJlIGF0dGVtcHRlZCBleGNlcHQgYXQgdGhlIGV4cHJlc3Mgc3VnZ2VzdC0gCmlvbiBvZiBhIE1hc3Rlciwgd2hvIHdpbGwgd2F0Y2ggb3ZlciBIaXMgCnB1cGlsIGR1cmluZyB0aGUgdmFyaW91cyBzdGFnZXMgb2YgdGhlIApleHBlcmltZW50LiAKCkkgbW9zdCBzb2xlbW5seSB3YXJuIGFpbCBzdHVkZW50cyAKYWdhaW5zdCBtYWtpbmcgYW55IGVmZm9ydCB3aGF0ZXZlciBpbiAKdGhlIGRpcmVjdGlvbiBvZiBhd2FrZW5pbmcgdGhlc2UgdHJlLSAKbWVuZG91cyBmb3JjZXMsIGV4Y2VwdCB1bmRlciBzdWNoIHF1YWxpLSAKCgpmaWVkIHR1aXRpb24sIGZvciBJIGhhdmUgbXlzZWxmIHNlZW4gbWFueSAKNTkgCgoKNDY2IF8gQURZQVIgVEFMS1MgCgoKY2FzZXMgb2YgdGhlIHRlcnJpYmxlIGVmZmVjdHMgd2hpY2ggZm9sbG93IApmcm9tIGlnbm9yYW50IGFuZCBpbGwtYWR2aXNlZCBtZWRkbGluZyB3aXRoIAp0aGVzZSB2ZXJ5IHNlcmlvdXMgbWF0dGVycy4gVGhlIGZvcmNlIGlzIGEgCnRyZW1lbmRvdXMgcmVhbGl0eSwgb25lIG9mIHRoZSBncmVhdCBiYXNpYyAKZmFjdHMgb2YgbmF0dXJlLCBhbmQgbW9zdCBlbXBoYXRpY2FsbHkgaXQgCmlzIG5vdCBhIHRobWcgdG8gYmUgcGxheWVkIHdpdGgsIG9yIHRvIGJlIApsaWdodGx5IHRha2VuIGluIGhhbmQsIGZvciB0byBleHBlcmltZW50IAp3aXRoIGl0IHdpdGhvdXQgdW5kZXJzdGFuZGluZyBpdCBpcyBmYXIgCm1vcmUgZGFuZ2Vyb3VzIHRoYW4gaXQgd291bGQgYmUgLWZvciBhIApjaGlsZCB0byBwbGF5IHdpdGggbml0cm9nbHljZXJpbmUuIEFzIGlzIAp2ZXJ5IHRydWx5IHNhaWQgaW4gdGhlIEhhdGhheW9nYXByYWRpcGlrYSA6IArigJxJdCBnaXZlcyBsYmVyYXRpb24gdG8geW9naXMgYW5kIGJvbmRhZ2UgCnRvIGZvb2xzLuKAnSAoaS4gMTA3LikgCgpJbiBtYXR0ZXJzIHN1Y2ggYXMgdGhlc2UsIHN0dWRlbnRzIHNvIApvZnRlbiBzZWVtIHRvIHRoaW5rIHRoYXQgc29tZSBzcGVjaWFsIGV4LSAKY2VwdGlvbiB0byB0aGUgbGF3cyBvZiBuYXR1cmUgd2lsbCBiZSBtYWRlIAppbiB0aGVpciBjYXNlLCB0aGF0IHNvbWUgc3BlY2lhbCBpbnRlcnZlbnRpb24gCm9mIHByb3ZpZGVuY2Ugd2lsbCBzYXZlIHRoZW0gZnJvbSB0aGUgCmNvbnNlcXVlbmNlcyBvZiB0aGVpciBmb2xseS4gQXNzdXJlZGx5IG5vLSAKdGhpbmcgb2YgdGhhdCBzb3J0IHdpbGwgaGFwcGVuLCBhbmQgdGhlIAptYW4gd2hvIHdhbnRvbmx5IHByb3Zva2VzIGFuIGV4cGxvc2lvbiAKaXMgcXVpdGUgaGtlbHkgdG8gYmVjb21lIGl0cyBmaXJzdCB2aWN0aW0uIApJdCB3b3VsZCBzYXZlIG11Y2ggdHJvdWJsZSBhbmQgZGlzYXBwb2ludC0gCm1lbnQgaWYgc3R1ZGVudHMgY291bGQgYmUgaW5kdWNlZCB0byB1bi0gCmRlcnN0YW5kIHRoYXQgaW4gYWxsIG1hdHRlcnMgY29ubmVjdGVkIHdpdGggCm9jZXVsdGlzbSB3ZSBtZWFuIGp1c3QgZXhhY3RseSBhbmQgbGl0ZXJhbGx5IAp3aGF0IHdlIHNheSwgYW5kIHRoYXQgaXQgaXMgYXBwbGljYWJsZSBpbiAKZXZlcnkgY2FzZSB3aXRob3V0IGV4Y2VwdGlvbi4gRm9yIHRoZXJlIGlzIAoKCsK7IFRIRSBTRVJQRU5ULUZJUkUgNDY3IAoKCm5vIHN1Y2ggdGhpbmcgYXMgZmF2b3VyaXRpc20gaW4gdGhlIHdvcmtpbmcgb2YgCnRoZSBncmVhdCBsYXdzIG9mIHRoZSB1bml2ZXJzZS4gCgpFdmVyeWJvZHkgd2FudHMgdG8gdHJ5IGFsbCBwb3NzaWJsZSBleC0gCnBlcmltZW50czsgZXZlcnlib2R5IGlzIGNvbnZpbmNlZCB0aGF0IGhlIAppcyBxdWl0ZSByZWFkeSBmb3IgdGhlIGhpZ2hlc3QgcG9zc2libGUgCnRlYWNoaW5nIGFuZCBmb3IgYW55IHNvcnQgb2YgZGV2ZWxvcG1lbnQsIAphbmQgbm8gb25lIGlzIHdpbGxpbmcgdG8gd29yayBwYXRpZW50bHkgCmFsb25nIGF0IHRoZSBpbXByb3ZlbWVudCBvZiBjaGFyYWN0ZXIsIAphbmQg4oCYdG8gZGV2b3RlIGhpcyB0aW1lIGFuZCBoaXMgZW5lcmdpZXMgCnRvIGRvaW5nIHNvbWV0aGluZyB1c2VmdWwgZm9yIHRoZSB3b3JrIAphZiB0aGUgU29jaWV0eSwgd2FpdGluZyBmb3IgYWxsIHRoZXNlIG90aGVyIAp0aGluZ3MgdW50aWwgYSBNYXN0ZXIgc2hhbGwgYW5ub3VuY2UgdGhhdCAKaGUgaXMgcmVhZHkgZm9yIHRoZW0uIOKAmGxoZSBvbGQgYXBob3Jpc20gCnN0aWxsIHJlbWFpbnMgdHJ1ZTog4oCYU2VlayB5ZSBfIGZpcnN0IHRoZSAKa2luZ2RvbSBvZiBHb2QgYW5kIEhpcyBfIHJpZ2h0ZW91c25lc3MsIAphbmQgYWxsIHRoZXNlIHRoaW5ncyBzaGFsbCBiZSBhZGRlZCB1bnRvIHlvdS7igJ0gCgpUaGVyZSBhcmUgc29tZSBjYXNlcyBpbiB3aGljaCB0aGUgZmlyZSAKd2FrZXMgc3BvbnRhbmVvdXNseSwgc28gdGhhdCBhIGR1bGwgeXZsb3cgCmlzIGZlbHQ7IGl0IG1heSBldmVuIGJlZ2ltIHRvIG1vdmUgb2YgaXQtIApzZWxmLCB0aG91Z2ggdGhpcyBpcyByYXJlLiBJbiB0aGlzIGxhdHRlciAKY2FzZSBpdCB3b3VsZCBiZSBsaWtlbHkgdG8gY2F1c2UgZ3JlYXQgcGFpbiwgCmFzLCBzaW5jZSB0aGUgcGFzc2FnZXMgYXJlIG5vdCBwcmVwYXJlZCBmb3IgCml0LCBpdCB3b3VsZCBoYXZlIHRvIGNsZWFyIGl0cyAtd2F5IApieSBhY3R1YWxseSBiYXJuaW5nIHVwIGEgdnJlYXQgZGVhbCBvZiAKZXRoZXJpYyBkcm9zc+KAlGEgcHJvY2VzcyB0aGF0IGNhbm5vdCBidXQgCmVuZ2VuZGVyIHN1ZmZlcm1nLiBXaGVuIGl0IHRodXMgYXdha2VzIApvZiBpdHNlbGYgb3IgaXMgYWNjaWRlbnRhbGx5IGFyb3VzZWQsIGl0IAp1c3VhbGx5IHRyaWVzIHRvIHJ1c2ggdXAgdGhlIGludGVyaW9yIG9mIAoKCjQ2OCBBRFlBUiBUQUxLUyAKCgp0aGUgc3BpbmUsIGluc3RlYWQgb2YgZm9sbG93aW5nIHRoZSBzcGlyYWwgCmNvdXJzZSBpbnRvIHdoaWNoIHRoZSBvY2N1bHRpc3QgaXMgdHJhaW5lZCAKdG8gZ3VpZGUgaXQuIElmIGl0IGJlIHBvc3NpYmxlLCB0aGUgd2lsbCAKc2hvdWxkIGJlIHNldCBpbiBtb3Rpb24gdG8gYXJyZXN0IGl0cyBvbi0gCndhcmQgcnVzaCwgYnV0IGlmIHRoYXQgcHJvdmVzIHRvIGJlIGltcG9zLSAKc2libGUgKGFzIGlzIG1vc3QgbGlrZWx5KSBubyBhbGFybSBuZWVkIGJlIApmZWx0LiBJdCB3aWxsIHByb2JhYmx5IHJ1c2ggb3V0IOKAmHRocm91Z2ggCnRoZSBoZWFkIGFuZCBlc2NhcGUgaW50byB0aGUgc3Vycm91bmRpbmcgCmF0bW9zcGhlcmUsIGFuZCBpdCBpcyBsaWtlbHkgdGhhdCBubyBoYXJtIAp3aWxsIHJlc3VsdCBiZXlvbmQgYSBzbGlnaHQgd2Vha2VuaW5nLiAKTm90aGluZyB3b3JzZSB0aGFuIGEgdGVtcG9yYXJ5IGxvc3Mgb2YgCmNvbnNjaW91c25lc3MgbmVlZCBiZSBhcHByZWhlbmRlZC4g4oCYVGhlIApyZWFsbHkgYXBwYWxsaW5nIGRhbmdlcnMgYXJlIGNvbm5lY3RlZCBub3QgCndpdGggaXRzIHVwd2FyZCBydXNoLCBidXQgd2l0aCB0aGUgcG9zc2ktIApiaWxpdHkgb2YgaXRzIHR1cm5pbmcgZG93bndhcmRzIGFuZCBpbi0gCndhcmRzLg==
sabato 1 gennaio 2000
[AL CORPUS] The Inner Life — Vol. I [3/4]
Iscriviti a:
Commenti sul post (Atom)
[AL CORPUS] Occult Chemistry [2/2]
VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9m...
-
VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9m...
-
XFwiXiAKCgpzICwgCgoKLl4gCgoKT0NDVUxUIENIRU1JU1RSWSAKCgpDbGFpcnZveWFudCBPYnNlcnZhdGlvbnMgb24gdGhlIApDaGVtaWNhbCBFbGVtZW50cyAKCgpCWSAKCgpBTk5J...
-
VEhPVUdIVC1GT1JNUyAKCgpCWSAKCkFOTklFIEJFU0FOVCAKCkFORCAKCkMuIFcuIExFQUQgQkVBVEVSIAoKCldJVEggRklGVFktRUlHSFQgSUxMVVNUUkFUSU9OUyAKCgpMT05ET04g...
Nessun commento:
Posta un commento