Return-Path: X-Original-To: apmail-hbase-user-archive@www.apache.org Delivered-To: apmail-hbase-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4BF55177A4 for ; Tue, 11 Nov 2014 04:21:36 +0000 (UTC) Received: (qmail 33621 invoked by uid 500); 11 Nov 2014 04:21:34 -0000 Delivered-To: apmail-hbase-user-archive@hbase.apache.org Received: (qmail 33555 invoked by uid 500); 11 Nov 2014 04:21:34 -0000 Mailing-List: contact user-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@hbase.apache.org Delivered-To: mailing list user@hbase.apache.org Delivered-To: moderator for user@hbase.apache.org Received: (qmail 30950 invoked by uid 99); 11 Nov 2014 03:19:37 -0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of cuijianwei@xiaomi.com designates 58.68.235.87 as permitted sender) From: =?gb2312?B?tN69qM6w?= To: "dev@hbase.apache.org" CC: "user@hbase.apache.org" Subject: RE: Themis : implements cross-row/corss-table transaction on HBase. Thread-Topic: Themis : implements cross-row/corss-table transaction on HBase. Thread-Index: Ac+aeoi6Y7C3BhBeTTifTbsVEsQx2gDm3EYAF6lV4a////xoAIABJO5D//+D04CAAJwAyw== Date: Tue, 11 Nov 2014 03:18:48 +0000 Message-ID: <1415675921438.32621@xiaomi.com> References: <1415609406818.12591@xiaomi.com> <1415668408202.15371@xiaomi.com>, In-Reply-To: Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.237.113.73] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org SGkgVGVkOgogVGhhbmtzIGZvciB5b3VyIGFkdmljZS4gWWVzLCBpdCBpcyBtb3JlIHJlYXNvbmFi bGUgdG8gYWRkIGNvbW1vbiBwcm9wZXJ0aWVzIGluIHBhcmVudCBwb206KS4gSSB1cGRhdGUgdGhl bWlzIHRvIHNldCBoYmFzZSB2ZXJzaW9uL2hhZG9vcCB2ZXJzaW9uIGluIHBhcmVudCBwb20sIGFu ZCBzZXQgaGJhc2UgdmVyc2lvbiB0byAwLjk4LjUtaGFkb29wMiBmb3IgZm9yX2hiYXNlXzAuOTgg YnJhbmNoLiBUaGUgdW5pdCB0ZXN0cyBhcmUgcGFzc2VkIHVuZGVyIHRoZXNlIG1vZGlmaWNhdGlv bnMuIAogIFdoZW4gdXNpbmcgMC45OC43LWhhZG9vcDIgaW4gZm9yX2hiYXNlXzAuOTggYnJhbmNo LCB0aGVyZSBhcmUgc29tZSBjb21waWxlIGVycm9ycyhtaXNzaW5nIE1lZGl1bVRlc3RzIGNsYXNz KSwgd2UgY2FtIGFkZCB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llcyB0byB0aGUgcG9tIG9mIHRo ZW1pcy1jbGllbnQgdG8gaW5jbHVkZSBNZWRpdW1UZXN0cyBjbGFzcy4KICAgPGRlcGVuZGVuY3k+ CiAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuaGJhc2U8L2dyb3VwSWQ+CiAgICAgIDxhcnRpZmFj dElkPmhiYXNlLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgogICAgICA8dmVyc2lvbj4ke2hiYXNl LnZlcnNpb259PC92ZXJzaW9uPgogICAgICA8Y2xhc3NpZmllcj50ZXN0czwvY2xhc3NpZmllcj4K ICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICA8L2RlcGVuZGVuY3k+CgogVGhlcmUgYXJlIHNv bWUgY29tbW9uIGRlcGVuZGVuY2llcyBhbW9uZyBzdWItcHJvamVjdHMsIEkgd2lsbCBwb2xpc2gg cG9tIHRvIGFkZCBjb21tb24gZGVwZW5kZW5jaWVzIHRvIHBhcmVudCBwb20uIAogIEJUVywgZG8g d2UgaGF2ZSBoYWRvb3AyIHZlcnNpb24gZm9yIGhiYXNlIDAuOTQgaW4gY2VudHJhbCBtYXZlbiBy ZXBvc2l0b3J5PwoKQmVzdApjdWlqaWFud2VpIApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkZyb206IFRlZCBZdSA8eXV6aGlob25nQGdtYWlsLmNvbT4KU2VudDogVHVl c2RheSwgTm92ZW1iZXIgMTEsIDIwMTQgOTo0MyBBTQpUbzogZGV2QGhiYXNlLmFwYWNoZS5vcmcK Q2M6IHVzZXJAaGJhc2UuYXBhY2hlLm9yZwpTdWJqZWN0OiBSZTogVGhlbWlzIDogaW1wbGVtZW50 cyBjcm9zcy1yb3cvY29yc3MtdGFibGUgdHJhbnNhY3Rpb24gb24gSEJhc2UuCgpUaGFua3MgSmlh bndlaSBmb3IgdGhlIHN1Z2dlc3Rpb24uCgpJIGNoZWNrZWQgb3V0IGZvcl9oYmFzZV8wLjk4IGJ1 dCBnb3QgdGhlIGZvbGxvd2luZyBlcnJvciB3aGVuIGJ1aWxkaW5nOgoKW0VSUk9SXSBGYWlsZWQg dG8gZXhlY3V0ZSBnb2FsIG9uIHByb2plY3QgdGhlbWlzLXByb3RvY29sOiBDb3VsZCBub3QKcmVz b2x2ZSBkZXBlbmRlbmNpZXMgZm9yIHByb2plY3QKY29tLnhpYW9taS5pbmZyYTp0aGVtaXMtcHJv dG9jb2w6amFyOjEuMC1TTkFQU0hPVDogQ291bGQgbm90IGZpbmQgYXJ0aWZhY3QKb3JnLmFwYWNo ZS5oYmFzZTpoYmFzZS1wcm90b2NvbDpqYXI6MC45OC41IGluIGNlbnRyYWwgKApodHRwOi8vcmVw by5tYXZlbi5hcGFjaGUub3JnL21hdmVuMikgLT4gW0hlbHAgMV0KCkkgdGhpbmsgdGhpcyBpcyBk dWUgdG8gdGhlIGZhY3QgdGhhdCAwLjk4IGlzIHJlbGVhc2VkIHdpdGggdHdvIHByb2ZpbGVzOgpv bmUgZm9yIGhhZG9vcC0xIGFuZCBvbmUgZm9yIGhhZG9vcC0yCgpDdXJyZW50bHkgZWFjaCBtb2R1 bGUgb2YgdGhlbWlzIGRlZmluZXMgaGJhc2UgdmVyc2lvbiBhczoKCiQgZmluZCAuIC1uYW1lICdw b20ueG1sJyAtZXhlYyBncmVwICcwLjk4JyB7fSBcOyAtcHJpbnQKICAgIDxoYmFzZS52ZXJzaW9u PjAuOTguNTwvaGJhc2UudmVyc2lvbj4KLi90aGVtaXMtY2xpZW50L3BvbS54bWwKICAgIDxoYmFz ZS52ZXJzaW9uPjAuOTguNTwvaGJhc2UudmVyc2lvbj4KLi90aGVtaXMtY29wcm9jZXNzb3IvcG9t LnhtbAogICAgPGhiYXNlLnZlcnNpb24+MC45OC41PC9oYmFzZS52ZXJzaW9uPgouL3RoZW1pcy1p bmRleC9wb20ueG1sCiAgICA8aGJhc2UudmVyc2lvbj4wLjk4LjU8L2hiYXNlLnZlcnNpb24+Ci4v dGhlbWlzLXByb3RvY29sL3BvbS54bWwKCkkgdHJpZWQgYWRkaW5nIC1EaGJhc2UudmVyc2lvbj0w Ljk4LjctaGFkb29wMiB0byBtYXZlbiBjb21tYW5kIGxpbmUgYnV0CnN0aWxsIGdvdCBzYW1lIGVy cm9yLgoKWW91IGNhbiBhZGQgYSBwcm9wZXJ0eSB0byBwYXJlbnQgcG9tLnhtbCB3aGljaCBkZWZp bmVzIGhiYXNlIHZlcnNpb24gc28KdGhhdCBjaGlsZCBwb20ueG1sIGNhbiByZWZlcmVuY2UuClRo YXQgd2F5LCBpdCBpcyBlYXN5IHRvIG92ZXJyaWRlIG9uIGNvbW1hbmQgbGluZS4KCkNoZWVycwoK T24gTW9uLCBOb3YgMTAsIDIwMTQgYXQgNToxMyBQTSwgtN69qM6wIDxjdWlqaWFud2VpQHhpYW9t aS5jb20+IHdyb3RlOgoKPiBIaSBUZWQ6Cj4gIHRoYW5rcyBmb3IgeW91ciBmZWVkYmFjay4gSSB0 cmllZCB0byBjbG9uZSBmb3JfaGJhc2VfMC45OCBicmFuY2ggYnk6ICJnaXQKPiBjbG9uZSBodHRw czovL2dpdGh1Yi5jb20vWGlhb01pL3RoZW1pcy90cmVlL2Zvcl9oYmFzZV8wLjk4IiwgaXQgcmV0 dXJuczoKPiAgImVycm9yOiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNDAzIHdo aWxlIGFjY2Vzc2luZwo+IGh0dHBzOi8vZ2l0aHViLmNvbS9YaWFvTWkvdGhlbWlzL3RyZWUvZm9y X2hiYXNlXzAuOTgvaW5mby9yZWZzIi4KPgo+ICBJIHRoaW5rIHdlIGNhbiBjbG9uZSB0aGVtaXMg Ynk6ICJnaXQgY2xvbmUKPiBodHRwczovL2dpdGh1Yi5jb20vWGlhb01pL3RoZW1pcyIgZmlyc3Rs eS4gVGhlbiwgdmlldyB0aGUgcmVtb3RlCj4gZm9yX2hiYXNlXzAuOTggYnJhbmNoIGJ5Ogo+ICAi Z2l0IGJyYW5jaCAtciIgYW5kIGdldDoKPiAgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIK PiAgIG9yaWdpbi9mb3JfaGJhc2VfMC45OAo+ICAgb3JpZ2luL21hc3Rlcgo+Cj4gICBBbmQgdGhl biBjaGVja291dCByZW1vdGUgb3JpZ2luL2Zvcl9oYmFzZV8wLjk4IHRvIGxvY2FsIGFzOgo+ICAg ImdpdCBjaGVja291dCAtYiBmb3JfaGJhc2VfMC45OCBvcmlnaW4vZm9yX2hiYXNlXzAuOTgiCj4K PiBUaGFua3MuCj4KPiBCZXN0Cj4gY3VpamlhbndlaQo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBGcm9tOiBUZWQgWXUgPHl1emhpaG9uZ0BnbWFpbC5jb20+Cj4g U2VudDogTW9uZGF5LCBOb3ZlbWJlciAxMCwgMjAxNCAxMTozOSBQTQo+IFRvOiBkZXZAaGJhc2Uu YXBhY2hlLm9yZwo+IENjOiB1c2VyQGhiYXNlLmFwYWNoZS5vcmcKPiBTdWJqZWN0OiBSZTogVGhl bWlzIDogaW1wbGVtZW50cyBjcm9zcy1yb3cvY29yc3MtdGFibGUgdHJhbnNhY3Rpb24gb24KPiBI QmFzZS4KPgo+IEppYW53ZWk6Cj4gSSB1c2VkIHRoaXMgY29tbWFuZCB0byBjbG9uZSB5b3VyIHJl cG86Cj4gZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9YaWFvTWkvdGhlbWlzL3RyZWUvZm9y X2hiYXNlXzAuOTggdGhlbWlzCj4KPiBCdXQgSSBvbmx5IGZvdW5kIDAuOTQgYmVpbmcgcmVmZXJl bmNlZCBpbiB0aGUgcG9tLnhtbCBmaWxlczoKPgo+ICQgZmluZCAuIC1uYW1lIHBvbS54bWwgLWV4 ZWMgZ3JlcCAnMC45NC4nIHt9IFw7IC1wcmludAo+ICAgICA8aGJhc2UudmVyc2lvbj4wLjk0LjIx PC9oYmFzZS52ZXJzaW9uPgo+IC4vdGhlbWlzLWNsaWVudC9wb20ueG1sCj4gICAgIDxoYmFzZS52 ZXJzaW9uPjAuOTQuMjE8L2hiYXNlLnZlcnNpb24+Cj4gLi90aGVtaXMtY29wcm9jZXNzb3IvcG9t LnhtbAo+ICAgICA8aGJhc2UudmVyc2lvbj4wLjk0LjIxPC9oYmFzZS52ZXJzaW9uPgo+IC4vdGhl bWlzLWluZGV4L3BvbS54bWwKPgo+IERpZCBJIG1pc3Mgc29tZXRoaW5nID8KPgo+IENoZWVycwo+ Cj4gT24gTW9uLCBOb3YgMTAsIDIwMTQgYXQgMTI6NTAgQU0sILTevajOsCA8Y3VpamlhbndlaUB4 aWFvbWkuY29tPiB3cm90ZToKPgo+ID4gSGkgZXZlcnlvbmU6Cj4gPiBJbiBsYXN0IGZldyBtb250 aHMsIHdlIGhhdmUgdXBkYXRlZCBUaGVtaXMgdG8gYWNoaWV2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UK PiA+IGFuZCBpbmNsdWRlIG1vcmUgZmVhdHVyZXM6Cj4gPgo+ID4gMS4gSW1wcm92ZSB0aGUgc2lu Z2xlLXJvdyB3cml0ZSBwZXJmb3JtYW5jZSBmcm9tIDIzJShyZWxhdGl2ZSBkcm9wCj4gPiBjb21w YXJlZCB3aXRoIEhCYXNlJ3MgcHV0KSB0byA2MCUoZm9yIG1vc3QgdGVzdCBjYXNlcykuIEZvciBz aW5nbGUtcm93Cj4gPiB3cml0ZSB0cmFuc2FjdGlvbiwgd2Ugb25seSB3cml0ZSBsb2NrIHRvIE1l bVN0b3JlIGluIHByZXdyaXRlLXBoYXNlLAo+IHRoZW4sCj4gPiB3ZSBlcmFzZSBjb3JyZXNwb25k aW5nIGxvY2ssIHdyaXRlIGRhdGEgYW5kIGNvbW1pdCBpbmZvcm1hdGlvbiB0byBITG9nIGluCj4g PiBjb21taXQtcGhhc2UuIFRoaXMgd29uJ3QgYnJlYWsgdGhlIGNvcnJlY3RuZXNzIG9mIHBlcmNv bGF0b3IgYWxnb3JpdGhtCj4gYW5kCj4gPiB3aWxsIGhlbHAgaW1wcm92ZSB0aGUgcGVyZm9ybWFu Y2UgYSBsb3QgZm9yIHNpbmdsZS1yb3cgd3JpdGUuCj4gPgo+ID4gMi4gU3VwcG9ydCBIQmFzZSAw Ljk4LiBXZSBjcmVhdGUgYSBicmFuY2g6Cj4gPiBodHRwczovL2dpdGh1Yi5jb20vWGlhb01pL3Ro ZW1pcy90cmVlL2Zvcl9oYmFzZV8wLjk4IHRvIG1ha2UgdGhlbWlzCj4gPiBzdXBwb3J0IEhCYXNl IDAuOTgoQ3VycmVudGx5LCBzdXBwb3J0IEhCYXNlIDAuOTguNSkuIEFsbCB0aGUgZnVuY3Rpb25z IG9mCj4gPiBtYXN0ZXIgYnJhbmNoIHdpbGwgYWxzbyBiZSBpbXBsZW1lbnRlZCBpbiB0aGlzIGJy YW5jaC4KPiA+Cj4gPiAzLiBUcmFuc2FjdGlvbiBUVEwgc3VwcG9ydCBhbmQgT2xkIERhdGEgQ2xl YW4uIFVzZXJzIGNvdWxkIHNldCBUVEwgZm9yCj4gPiByZWFkL3dyaXRlIHRyYW5zYWN0aW9uIHJl c3BlY3RpdmVseS4gVGhlbiwgb2xkIGRhdGEgd2hpY2ggY291bGQgbm90IGJlCj4gcmVhZAo+ID4g d2lsbCBiZSBjbGVhbmVkIHBlcmlvZGljYWxseS4KPiA+Cj4gPiA0LiBNYXBSZWR1Y2UgU3VwcG9y dC4gV2UgaW1wbGVtZW50IGEgZ3JvdXAgb2YgY2xhc3NlcyB0byBzdXBwb3J0IHJlYWQKPiBkYXRh Cj4gPiBieSB0aGVtaXMgdHJhbnNhY3Rpb24gaW4gTWFwcGVyIGpvYiBhbmQgd3JpdGUgZGF0YSBi eSB0aGVtaXMgdHJhbnNhY3Rpb24KPiBpbgo+ID4gUmVkdWNlIGpvYi4KPiA+Cj4gPiBGb3IgbW9y ZSBkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoZSBnaXRodWI6Cj4gPiBodHRwczovL2dpdGh1Yi5jb20v WGlhb01pL3RoZW1pcyhvcgo+ID4gaHR0cHM6Ly9naXRodWIuY29tL1hpYW9NaS90aGVtaXMvdHJl ZS9mb3JfaGJhc2VfMC45OCkgb3IgamlyYToKPiA+IGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcv amlyYS9icm93c2UvSEJBU0UtMTA5OTkgLiBJZiB5b3UgZmluZCBUaGVtaXMKPiA+IGludGVyZXN0 aW5nLCBwbGVhc2UgbGVhdmUgdXMgY29tbWVudCBpbiB0aGUgbWFpbCwgamlyYSBvciBnaXRodWIu Cj4gPgo+ID4gQmVzdAo+ID4gY3VpamlhbndlaQo+ID4KPiA+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiA+IEZyb206IHNhaW50LmFja0BnbWFpbC5jb20gPHNhaW50 LmFja0BnbWFpbC5jb20+IG9uIGJlaGFsZiBvZiBTdGFjayA8Cj4gPiBzdGFja0BkdWJvY2UubmV0 Pgo+ID4gU2VudDogU3VuZGF5LCBKdWx5IDEzLCAyMDE0IDE6MTIgUE0KPiA+IFRvOiBIQmFzZSBE ZXYgTGlzdAo+ID4gQ2M6IHVzZXJAaGJhc2UuYXBhY2hlLm9yZwo+ID4gU3ViamVjdDogUmU6IFRo ZW1pcyA6IGltcGxlbWVudHMgY3Jvc3Mtcm93L2NvcnNzLXRhYmxlIHRyYW5zYWN0aW9uIG9uCj4g PiBIQmFzZS4KPiA+Cj4gPiBPbiBUdWUsIEp1bCA4LCAyMDE0IGF0IDEyOjM0IEFNLCC03r2ozrAg PGN1aWppYW53ZWlAeGlhb21pLmNvbT4gd3JvdGU6Cj4gPgo+ID4gPiBIaSBldmVyeW9uZSwgSSB3 YW50IHRvIGludHJvZHVjZSBvdXIgb3Blbi1zb3VyY2UgcHJvamVjdCBUaGVtaXMgd2hpY2gKPiA+ ID4gaW1wbGVtZW50cyBjcm9zcy1yb3cvY29yc3MtdGFibGUgdHJhbnNhY3Rpb24gb24gSEJhc2Uu Cj4gPiA+Cj4gPiA+IFRoZW1pcyBmb2xsb3dzIGdvb2dsZSdzIHBlcmNvbGF0b3IgYWxnb3JpdGht KAo+ID4gPiBodHRwOi8vcmVzZWFyY2guZ29vZ2xlLmNvbS9wdWJzL3B1YjM2NzI2Lmh0bWwpLCB3 aGljaCBwcm92aWRlcwo+ID4gPiBBQ0lELWNvbXBsaWFudCB0cmFuc2FjdGlvbiBhbmQgc25hcHNo b3QgaXNvbGF0aW9uLiBUaGUgY3Jvc3Mtcm93Cj4gPiA+IHRyYW5zYWN0aW9uIGlzIGJhc2VkIG9u IEhCYXNlJ3Mgc2luZ2xlLXJvdyBhdG9taWMgc2VtYW50aWNzIGFuZCBkb2Vzbid0Cj4gPiB1c2UK PiA+ID4gYSBjZW50cmFsIHRyYW5zYWN0aW9uIHNlcnZlciwgc28gdGhhdCBzdXBwb3J0cyBsaW5l YXItc2NhbGFiaWxpdHkuCj4gPiA+Cj4gPiA+IFRoZW1pcyBkZXBlbmRzIG9uIGEgdGltZXN0YW1w IHNlcnZlciB0byBwcm92aWRlcyBnbG9iYWwgc3RyaWN0bHkKPiA+ID4gaW5jcmVtZW50YWwgdGlt ZXN0YW1wIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgdHJhbnNhY3Rpb25zLCB3aGljaCB3aWxsCj4g YmUKPiA+ID4gdXNlZCB0byByZXNvbHZlIHRoZSB3cml0ZS13cml0ZSBhbmQgcmVhZC13cml0ZSBj b25mbGljdHMuIFRoZSB0aW1lc3RhbXAKPiA+ID4gc2VydmVyIGlzIGxpZ2h0d2VpZ2h0IGFuZCBj b3VsZCBhY2hpZXZlIGhpZ2h0IHRocm91Z2hwdXQoNTAwLCAwMDAgKwo+IHFwcyksCj4gPiA+IGFu ZCBUaGVtaXMgd2lsbCBiYXRjaCB0aW1lc3RhbXAgcmVxdWVzdHMgYWNyb3NzIHRyYW5zYWN0aW9u cyBpbiBvbmUKPiBScGMsCj4gPiBzbwo+ID4gPiB0aGF0IGl0IHdvbid0IGJlY29tZSB0aGUgYm90 dGxlbmVjayBvZiB0aGUgc3lzdGVtIGV2ZW4gd2hlbiBwcm9jZXNzaW5nCj4gPiA+IGJpbGxpb25z IG9mIHRyYW5zYWN0aW9ucyBldmVyeSBkYXkuCj4gPiA+Cj4gPiA+IEFsdGhvdWdoIFRoZW1pcyBj b3VsZCBiZSBpbXBsZW1lbnRlZCB0b3RhbGx5IGluIGNsaWVudC1zaWRlLCB3ZSBhZG9wdAo+ID4g PiBjb3Byb2Nlc3NvciBmcmFtZXdvcmsgb2YgSEJhc2UgdG8gYWNoaWV2ZSBoaWdoZXIgcGVyZm9y bWFuY2UuIFRoZW1pcwo+ID4gPiBpbmNsdWRlcyBhIGNsaWVudC1zaWRlIGxpYnJhcnkgdG8gcHJv dmlkZXMgdHJhbnNhY3Rpb24gQVBJcywgc3VjaCBhcwo+ID4gPiB0aGVtaXNQdXQvdGhlbWlzR2V0 L3RoZW1pc1NjYW4vdGhlbWlzRGVsZXRlLCBhbmQgYSBjb3Byb2Nlc3NvciBsaWJyYXJ5Cj4gPiA+ IGxvYWRlZCBvbiByZWdpb25zZXJ2ZXIuIFRoZXJlZm9yZSwgVGhlbWlzIGNvdWxkIGJlIHVzZWQg d2l0aG91dAo+IGNoYW5naW5nCj4gPiA+IHRoZSBjb2RlIGFuZCBsb2dpYyBvZiBIQmFzZS4KPiA+ ID4KPiA+ID4gV2UgaGF2ZSBiZWVuIHZhbGlkYXRpbmcgdGhlIGNvcnJlY3RuZXNzIG9mIFRoZW1p cyBmb3IgYSBmZXcgbW9udGhzIGJ5IGEKPiA+ID4gQWNjb3VudFRyYW5zZmVyIHNpbXVsYXRpb24g cHJvZ3JhbSwgd2hpY2ggY29uY3VycmVudGx5IGRvZXMgY3Jvc3Mtcm93Cj4gPiA+IHRyYW5zYWN0 aW9ucyBieSB0cmFuc2ZlcnJpbmcgbW9uZXkgYW1vbmcgZGlmZmVyZW50IGFjY291bnRzKGVhY2gK PiBhY2NvdW50Cj4gPiBpcwo+ID4gPiBhIHJvdyBpbiBIQmFzZSkgYW5kIHZlcmlmaWVzIHRvdGFs IG1vbmV5IG9mIGFsbCBhY2NvdW50cyBkb2Vzbid0IGNoYW5nZQo+ID4gaW4KPiA+ID4gdGhlIHNp bXVsYXRpb24uIFdlIGhhdmUgYWxzbyBydW4gVGhlbWlzIG9uIG91ciBwcm9kdWN0aW9uIGVudmly b25tZW50Lgo+ID4gPgo+ID4gPiBXZSB0ZXN0IHRoZSBwZXJmb3JtYW5jZSBvZiBUaGVtaXMgYW5k IGdldCBjb21wYXJhYmxlIHJlc3VsdCBhcwo+ID4gcGVyY29sYXRvci4KPiA+ID4gVGhlIHNpbmds ZS1jb2x1bW4gdHJhbnNhY3Rpb24gcmVwcmVzZW50cyB0aGUgd29yc3QgcGVyZm9ybWFuY2UgY2Fz ZSBmb3IKPiA+ID4gVGhlbWlzIGNvbXBhcmVkIHdpdGggSEJhc2UsIHRoZSByZXN1bHQgaXM6Cj4g PiA+IDEpIEZvciByZWFkLCB0aGUgcGVyZm9ybWFuY2Ugb2YgcGVyY29sYXRvciBpcyA5MCUgb2Yg SEJhc2U7Cj4gPiA+IDIpIEZvciB3cml0ZSwgdGhlIHBlcmZvcm1hbmNlIG9mIHBlcmNvbGF0b3Ig aXMgMjMlIG9mIEhCYXNlLgo+ID4gPiBUaGUgd3JpdGUgcGVyZm9ybWFuY2UgZHJvcHMgYSBsb3Qg YmVjYXVzZSBUaGVtaXMgdXNlcyB0d28tcGhhc2UgY29tbWl0Cj4gPiA+IHByb3RvY29sIHRvIGFj aGlldmUgQUNJRCBvZiB0cmFuc2FjdGlvbi4gRm9yIG11bHRpLXJvdyB3cml0ZSwgd2UKPiBpbXBy b3ZlCj4gPiA+IHRoZSBwZXJmb3JtYW5jZSBieSBwYXJhbGxlbGluZyBhbGwgd3JpdGVzIG9mIHBy ZS13cml0ZSBwaGFzZS4gRm9yCj4gPiA+IHNpbmdsZS1yb3cgd3JpdGUsIHdlIGFyZSBvcHRpbWl6 aW5nIHR3by1waGFzZSBjb21taXQgcHJvdG9jb2wgdG8KPiBhY2hpZXZlCj4gPiA+IGJldHRlciBw ZXJmb3JtYW5jZSBhbmQgd2lsbCB1cGRhdGUgdGhlIHJlc3VsdCB3aGVuIGl0IGlzIHJlYWR5LiBU aGUKPiA+IGRldGFpbHMKPiA+ID4gb2YgcGVyZm9ybWFuY2UgcmVzdWx0IGNvdWxkIGJlIGZvdW5k IGluIGdpdGh1Yi4KPiA+ID4KPiA+ID4gVGhlIHJlcG9zaXRvcnkgYW5kIGludHJvZHVjdGlvbiBv ZiBUaGVtaXMgaW5jbHVkZToKPiA+ID4gMS4gVGhlbWlzIGdpdGh1YjogaHR0cHM6Ly9naXRodWIu Y29tL1hpYW9NaS90aGVtaXMvLiBUaGUgc291cmNlIGNvZGUsCj4gPiA+IHBlcmZvcm1hbmNlIHRl c3QgcmVzdWx0IGFuZCB1c2VyIGd1aWRlIGNvdWxkIGJlIGZvdW5kIGhlcmUuCj4gPiA+IDIuIFRo ZW1pcyBqaXJhIDogaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9IQkFTRS0x MDk5OQo+ID4gPiAzLiBDaHJvbm9zIGdpdGh1YjogaHR0cHM6Ly9naXRodWIuY29tL1hpYW9NaS9j aHJvbm9zLiBDaHJvbm9zIGlzIG91cgo+ID4gPiBvcGVuLXNvdXJjZSBoaWdoLWF2YWlsYWJpbGl0 eSwgaGlnaC1wZXJmb3JtYW5jZSB0aW1lc3RhbXAgc2VydmVyIHRvCj4gPiBwcm92aWRlCj4gPiA+ IGdsb2JhbCBzdHJpY3RseSBpbmNyZW1lbnRhbCB0aW1lc3RhbXAgZm9yIFRoZW1pcy4KPiA+ID4K PiA+ID4gSWYgeW91IGZpbmQgVGhlbWlzIGludGVyZXN0aW5nLCBwbGVhc2UgbGVhdmUgdXMgY29t bWVudCBpbiB0aGUgbWFpbCwKPiBqaXJhCj4gPiA+IG9yIGdpdGh1Yi4KPiA+ID4KPiA+ID4gQmVz dAo+ID4gPiBjdWlqaWFud2VpCj4gPiA+Cj4gPgo+ID4gRXhjZWxsZW50LiAgTmljZSB3b3JrIGxh ZHMhCj4gPiBTdC5BY2sKPiA+Cj4K