Re: Partial restructuring of Freenet's code
Steve Dougherty <steve-kVTqj8yhOEv2eFz/[email protected]> Fri, 26 Apr 2019 11:33:32 +0000
| Newsgroups | gmane.network.freenet.devel |
|---|---|
| Message-ID | <PaUbNRZJB4dEwT_xbRvJvPIe6iI_rIY07IZYJf1o_hVqI_yMHU52_qMEz8N2sZ2IuvSj7efro69l6Aj2mvWJZuOUmr4n3w-eHOpIyKzGFVw=@asksteved.com> |
--b1_43b82ff42461de15096c1434c769a311 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB3cml0aW5nIHRoaXMhIFlvdXIgYXBwcm9hY2hlcyBzZWVtIHJlYXNvbmFibGUg dG8gbWUuCgpZZXMsIG1vY2tpbmcgdGltZSB3aWxsIGJlIGhlbHBmdWwuIEl04oCZcyBub3QgIGNs ZWFyIHRvIG1lIGhvdyBtYW55IHBsYWNlcyB0aGF0IHdpbGwgYmUgb2YgdXNlLCBvciB3aGV0aGVy IG1vY2tpbmcgd291bGQgc3RpbGwgYmUgdmlhYmxlIGluIGludGVncmF0aW9uIHRlc3RzIGluc3Rl YWQgb2YganVzdCB1bml0IHRlc3RzLCBidXQgaXTigJlzIGRlZmluaXRlbHkgYSBnb29kIHRvb2wg dG8gaGF2ZS4gRG8geW91IGtub3cgaWYgSlVuaXQgaGFzIGFueXRoaW5nIHRoYXQgY2FuIGhlbHAg d2l0aCB0aGF0PyBJdCBzZWVtcyBsaWtlIGEgY29tbW9uIGVub3VnaCBuZWVkIHRoYXQgaXQgbWln aHQuCgpUZXN0aW5nIGNvbmN1cnJlbnQgdGhpbmdzIG1heSByZXF1aXJlIG1vcmUgQ29uZGl0aW9u cyBmb3IgdGhyZWFkcyB0byB3YWl0IG9uLiBJdOKAmXMgbm90IGNsZWFyIHRvIG1lIGhvdyBtdWNo IGVmZm9ydCB0aGF0IHdpbGwgcmVxdWlyZSB0byBiZSB2aWFibGUsIG9yIGhvdyBiZXN0IHRvIGV4 cG9zZSB0aGVtLgoKLSBTdGV2ZQoKT24gRnJpLCBBcHIgMjYsIDIwMTkgYXQgNjozNCBBTSwgTWFy dGluIEJ5cmVuaGVpZCA8bWFydGluLmJ5cmVuaGVpZEB0dS1kcmVzZGVuLmRlPiB3cm90ZToKCj4g SGVsbG8gZXZlcnlvbmUsCj4KPiBJJ3ZlIHNlbnQgdGhpcyBtYWlsIGF0IHRoZSBlbmQgb2YgbGFz dCB5ZWFyIHRvIHRoaXMgbGlzdCBidXQgaXQgc2VlbXMKPiB0aGF0IGl0IG5ldmVyIG1hZGUgaXQg dG8gaXRzIHN1YnNjcmliZXJzLiBUaHVzLCBJJ20gdHJ5aW5nIGFnYWluOgo+Cj4gSSBzdGFydGVk IHRvIHJlZmFjdG9yIHNldmVyYWwgcGFydHMgb2YgdGhlIEZyZWVuZXQgQ29kZSB0byBtYWtlIHRo ZSBpdAo+IGVhc2llciB0byB0ZXN0IGFuZCB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgcGFydHMg b2YgaXQgaW4gaXNvbGF0aW9uLgo+IEJlZm9yZSBJIGNvbnRpbnVlIGRvaW5nIHNvLCBJIHdvdWxk IGxpa2UgdG8ga25vdyB5b3VyIHRob3VnaHRzIG9uIG15Cj4gYXBwcm9hY2ggYW5kIHdoZXRoZXIg eW91IHdvdWxkIGFjdHVhbGx5IHdlbGNvbWUgdGhlc2UgY2hhbmdlcy4gWW91IGNhbgo+IGZpbmQg dGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYXJ0aWFsbHkgcmVmYWN0b3JlZCBjb2RlIG9uIEdp dGh1YiBbMV0uCj4KPiBFc3NlbnRpYWxseSwgSSBkaWQgdGhlIGZvbGxvd2luZyB0aHJlZSBjaGFu Z2VzIHRvIHRoZSBOb2RlLSwKPiBOb2RlQ3J5cHRvLSxQZWVyTWFuYWdlci0sVWRwU29ja2V0SGFu ZGxlci0sTm9kZUlQUG9ydERldGVjdG9yLSBhbmQKPiBJUEFkZHJlc3NEZXRlY3Rvci1jbGFzczoK Pgo+IDEuIENyZWF0ZSBjb3JyZXNwb25kaW5nIEludGVyZmFjZXMgZm9yIGVhY2ggY2xhc3MuIFRo aXMgYWxsb3dzIHVzIHRvCj4gcmVwbGFjZSBhY3R1YWwgY2xhc3MgaW5zdGFuY2VzIChlLmcuIG9m IHRoZSBOb2RlIGNsYXNzKSB3aXRoIGEKPiB0ZXN0LXNwZWNpZmljIGR1bW15IGltcGxlbWVudGF0 aW9uLiBUaGlzIGR1bW15IGNhbiB0aGVuIGJlIGdpdmVuIGFzCj4gcGFyYW1ldGVyIHRvIGEgY29u c3RydWN0b3IuCj4KPiAyLiBFbmNhcHN1bGF0ZSBpbnN0YW50aWF0aW9uIG9mIGNsYXNzIG1lbWJl cnMgd2l0aGluIHByb3RlY3RlZCBtZXRob2RzLgo+IEJ5IG92ZXJyaWRpbmcgdGhlc2UgcHJvdGVj dGVkIG1ldGhvZHMsIHdlIGNhbiByZXBsYWNlIGNsYXNzIG1lbWJlcnMgd2l0aAo+IHRlc3Qtc3Bl Y2lmaWMgZHVtbXkgaW1wbGVtZW50YXRpb25zLgo+Cj4gMy4gQ3JlYXRlIGdldHRlci1NZXRob2Rz IHRvIGFjY2VzcyBjbGFzcyBtZW1iZXJzLiBNYW55IGNsYXNzZXMgaW4KPiBGcmVlbmV0IGhvbGQg YSByZWZlcmVuY2UgdG8gYSBOb2RlLWluc3RhbmNlIGFuZCBzb21lIGRpcmVjdGx5IGFjY2VzcyBp dHMKPiBtZW1iZXJzLiBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBub3QgYSBnb29kIHBy YWN0aWNlLCBpdCBrZXB0IG1lCj4gZnJvbSBjcmVhdGluZyBhbiBpbnRlcmZhY2UgZm9yIHRoZSBu b2RlIGNsYXNzLgo+Cj4gT25lIG9ic3RhY2xlIHdpdGggcG9pbnQgKDEpIHdhcyB0aGF0IHRoZXJl IGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIGEKPiBjbGFzcyBjYWxscyBhIG5vbi1wdWJsaWMgbWV0 aG9kIGZyb20gYW5vdGhlciBjbGFzcyBpbiB0aGUgc2FtZSBwYWNrYWdlLgo+IFRvIGlsbHVzdHJh dGUgbXkgY2hhbmdlcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0aHJlZSBleGFtcGxlIGNsYXNz ZXM6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBNeUNsYXNzIHsKPgo+ICAgICBib29s ZWFuIGdldEJvb2woKSB7IC4uLiB9Cj4KPiAgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoKSB7 IC4uLiB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBTYW1lUGFja2FnZUNs YXNzIHsKPiAgIHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7Cj4KPiAgICAg aWYgKHJlZi5nZXRCb29sKCkpIC4uLgo+Cj4gICB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUu QjsKPiBjbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7Cj4KPiAgIHB1YmxpYyBPdGhlclBhY2thZ2VD bGFzcyhNeUNsYXNzIHJlZikgewo+Cj4gICAgIHByb2Nlc3MocmVmLmdldFN0cmluZygpKTsKPgo+ ICAgfQo+Cj4gfQo+Cj4gQmVjYXVzZSBTYW1lUGFja2FnZUNsYXNzIGlzIHdpdGhpbiB0aGUgc2Ft ZSBwYWNrYWdlIGFzIE15Q2xhc3MsIHRoZQo+IGdldEJvb2wtbWV0aG9kIGlzIHZpc2libGUgdG8g dGhlIGZvcm1lciB3aGVyYXMgb25seSBnZXRTdHJpbmcoKSBpcwo+IHZpc2libGUgZm9yIHRoZSBP dGhlclBhY2thZ2VDbGFzcy4gQWZ0ZXIgbXkgcmVmYWN0b3JpbmcsIHdlIG5vdyBoYXZlIHRoZQo+ IGZvbGxvd2luZyAyIGludGVyZmFjZXM6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBwdWJsaWMg aW50ZXJmYWNlIE15Q2xhc3Mgewo+Cj4gICAgIFN0cmluZyBnZXRTdHJpbmcoKTsKPgo+IH0KPgo+ IHBhY2thZ2UgZXhhbXBsZS5BOwo+IGludGVyZmFjZSBQcm90ZWN0ZWRNeUNsYXNzIGV4dGVuZHMg TXlDbGFzcyB7Cj4KPiAgICAgYm9vbGVhbiBnZXRCb29sKCk7Cj4KPiB9Cj4KPiBQbGVhc2Ugbm90 ZSB0aGF0IHRoZSBmaXJzdCBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgaW50ZXJmYWNlIHdoaWxlIHRo ZQo+IHNlY29uZCBpbnRlcmZhY2UgaXMgcGFja2FnZS1sb2NhbC4gVGhlIHRocmVlIGV4YW1wbGUg Y2xhc3NlcyBub3cgbG9vayBhcwo+IGZvbGxvd3M6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBj bGFzcyBNeUNsYXNzSW1wbCBpbXBsZW1lbnRzIFByb3RlY3RlZE15Q2xhc3Mgewo+Cj4gICAgIHB1 YmxpYyBib29sZWFuIGdldEJvb2woKSB7IC4uLiB9Cj4KPiAgICAgcHVibGljIFN0cmluZyBnZXRT dHJpbmcoKSB7IC4uLiB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBTYW1l UGFja2FnZUNsYXNzIHsKPiAgIHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKFByb3RlY3RlZE15Q2xh c3MgcmVmKSB7Cj4KPiAgICAgaWYgKHJlZi5nZXRCb29sKCkpIC4uLgo+Cj4gICB9Cj4KPiB9Cj4K PiBwYWNrYWdlIGV4YW1wbGUuQjsKPiBjbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7Cj4KPiAgIHB1 YmxpYyBPdGhlclBhY2thZ2VDbGFzcyhNeUNsYXNzIHJlZikgewo+Cj4gICAgIHByb2Nlc3MocmVm LmdldFN0cmluZygpKTsKPgo+ICAgfQo+Cj4gfQo+Cj4gVGhlIGdldEJvb2wtTWV0aG9kIG9mIHRo ZSBNeUNsYXNzSW1wbC1jbGFzcyBpcyBub3cgcHVibGljLiBIb3dldmVyLCBpZgo+IGluc3RhbmNl cyBvZiB0aGlzIGNsYXNzIGFyZSBvbmx5IGFjY2Vzc2VkIHZpYSB0aGUgaW50ZXJmYWNlcyBpdCBp cyBvbmx5Cj4gdmlzaWJsZSB0byBjbGFzc2VzIHRoYXQgdXNlIHRoZSBQcm90ZWN0ZWRNeUNsYXNz IGludGVyZmFjZS4gVGhpcyB3YXksIHdlCj4gbWFpbnRhaW4gdGhlIHBhY2thZ2UtbG9jYWwgdmll dyBmb3IgdGhlIGRpZmZlcmVudCBtZXRob2RzLiBXaGF0IGRvIHlvdQo+IHRoaW5rIGFib3V0IHRo aXMgc29sdXRpb24/Cj4KPiBHaXZlbiB0aGUgYWJvdmUgY2xhc3NlcywgYW4gZXhhbXBsZSBmb3Ig YSBwb2ludCAoMiktcmVmYWN0b3JpbmcgaXMgYXMKPiBmb2xsb3dzOgo+Cj4gY2xhc3MgQW5vdGhl ckNsYXNzIHsKPgo+ICAgICBNeUNsYXNzIHJlZjsKPgo+ICAgICBwdWJsaWMgQW5vdGhlckNsYXNz KGludCBwYXJhbSkgewo+Cj4gICAgICAgcmVmID0gbmV3TXlDbGFzcyhwYXJhbSk7Cj4KPiAgICAg fQo+Cj4gICAgIHByb3RlY3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBhcmFtKSB7Cj4KPiAg ICAgICAgIHJldHVybiBuZXcgTXlDbGFzc0ltcGwocGFyYW0pOwo+Cj4gICAgIH0KPgo+IH0KPgo+ IEluc3RlYWQgb2YgY2FsbGluZyAibmV3IE15Q2xhc3NJbXBsKHBhcmFtKSIgZGlyZWN0bHkgaW4g dGhlIGNvbnN0cnVjdG9yLAo+IEkgdXNlIGEgcHJvdGVjdGVkIG1ldGhvZCBuZXdNeUNsYXNzLiBX aGVuIHdyaXRpbmcgYSB0ZXN0IGNhc2UsIEkgY2FuIG5vdwo+IGVhc2lseSB0ZXN0IEFub3RoZXJD bGFzcyB3aXRob3V0IG5lZWRpbmcgYW4gaW5zdGFuY2Ugb2YgTXlDbGFzc0ltcGwuIFRvCj4gZG8g c28sIEkgY3JlYXRlIGEgbWluaW1hbCBjbGFzcyBNeUNsYXNzU3R1YiB0aGF0IGltcGxlbWVudHMg dGhlCj4gTXlDbGFzcy1pbnRlcmZhY2UgYW5kIGRlcml2ZSB0aGUgZm9sbG93aW5nIGNsYXNzOgo+ Cj4gY2xhc3MgSW5zdHJ1bWVudGVkQW5vdGhlckNsYXNzIGV4dGVuZHMgQW5vdGhlckNsYXNzIHsK Pgo+ICAgICBwdWJsaWMgSW5zdHJ1bWVudGVkQW5vdGhlckNsYXNzKGludCBwYXJhbSkgewo+ICAg ICAgIHN1cGVyKHBhcmFtKTsKPiAgICAgfQo+Cj4gICAgIEBPdmVycmlkZQo+ICAgICBwcm90ZWN0 ZWQgTXlDbGFzcyBuZXdNeUNsYXNzKGludCBwYXJhbSkgewo+Cj4gICAgICAgcmV0dXJuIG5ldyBN eUNsYXNzU3R1YigpOwo+Cj4gICAgIH0KPgo+IH0KPgo+IEFzIGEgcHJvb2Ygb2YgY29uY2VwdCBm b3IgdGhpcyBhcHByb2FjaCwgSSBjcmVhdGVkIHNvbWUgaW5pdGlhbCB1bml0Cj4gdGVzdHMgZm9y IHRoZSBOb2RlQ3J5cHRvWzJdLSBhbmQgTm9kZUlQUG9ydERldGVjdG9yLWNsYXNzWzNdLgo+Cj4g VG8gbWUsIHR3byBwb2ludHMgdGhhdCBhcmUgc3RpbGwgb3BlbiB3aGVuIGl0IGNvbWVzIHRvIHRl c3RzIGFyZToKPgo+IC0gVGVzdGluZyBvZiB0aW1lLWJhc2VkIGNvbmRpdGlvbnM6IFRvIHRlc3Qg ZnVuY3Rpb25hbGl0aWVzIHN1Y2ggYXMKPiByYXRlLWxpbWl0aW5nIG9mIHJlcXVlc3RzLCB0aGUg Y2FsbHMgdG8gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkKPiBwcm9iYWJseSBuZWVkIHRvIGJl IHJlcGxhY2VkIGJ5IGEgY2FsbCB0byBhIG5vbi1zeXN0ZW0taW50ZXJmYWNlIHdpdGggYQo+IHNp bWlsYXIgbWV0aG9kLCB3aG9zZSBpbXBsZW1lbnRhdGlvbiBjYW4gdGhlbiBiZSBhZGFwdGVkIHRv IHRlc3QgY2FzZXMuCj4KPiAtIENvbmN1cnJlbmN5OiBJIGRpZG4ndCB5ZXQgc3BlbmQgbXVjaCB0 aW1lIHRoaW5raW5nIGFib3V0IGhvdyBjbGFzc2VzCj4gY2FuIGJlIHRlc3RlZCB0aGF0IHdhaXQg Zm9yIG90aGVyIHRocmVhZHMgdG8gb3BlcmF0ZSAoZS5nLiBsb2NhdGlvbgo+IHN3YXBwaW5nKSBi dXQgSSBhbSBvcHRpbWlzdGljIHRoYXQgdGhpcyBjYW4gYmUgZG9uZS4KPgo+IEtpbmQgcmVnYXJk cywKPiBNYXJ0aW4KPgo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9mcmVkL2NvbW1p dHMvdGVzdGluZy1yZWZhY3RvcmluZwo+Cj4gWzJdCj4gaHR0cHM6Ly9naXRodWIuY29tL3lhZGV2 ZWwvZnJlZC9ibG9iL3Rlc3RpbmctcmVmYWN0b3JpbmcvdGVzdC9mcmVlbmV0L25vZGUvTm9kZUNy eXB0b1Rlc3QuamF2YQo+Cj4gWzNdCj4gaHR0cHM6Ly9naXRodWIuY29tL3lhZGV2ZWwvZnJlZC9i bG9iL3Rlc3RpbmctcmVmYWN0b3JpbmcvdGVzdC9mcmVlbmV0L25vZGUvTm9kZUlQUG9ydERldGVj dG9yVGVzdC5qYXZhCj4KPiAtLQo+IE1hcnRpbiBCeXJlbmhlaWQKPiBTY2llbnRpZmljIEFzc2lz dGFudAo+Cj4gVGVjaG5pc2NoZSBVbml2ZXJzaXTDpHQgRHJlc2Rlbgo+IEZhY3VsdHkgb2YgQ29t cHV0ZXIgU2NpZW5jZQo+IEluc3RpdHV0ZSBvZiBTeXN0ZW0gQXJjaGl0ZWN0dXJlCj4gQ2hhaXIg b2YgUHJpdmFjeSBhbmQgRGF0YSBTZWN1cml0eQo+IDAxMDYyIERyZXNkZW4KPgo+IFRlbC46ICs0 OSAzNTEgNDYzIDM4MjM1Cj4gR1BHIDogRjE0NCBGQkNEIEYwQzIgMjU3QSA4N0VEIENGREUgMjRF QiBFNjg0IEQwQkUgRTc4NQ== --b1_43b82ff42461de15096c1434c769a311 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 ICAgIDxkaXY+VGhhbmtzIGZvciB3cml0aW5nIHRoaXMhIFlvdXIgYXBwcm9hY2hlcyBzZWVtIHJl YXNvbmFibGUgdG8gbWUuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5ZZXMsIG1vY2tpbmcgdGlt ZSB3aWxsIGJlIGhlbHBmdWwuIEl04oCZcyBub3QgJm5ic3A7Y2xlYXIgdG8gbWUgaG93IG1hbnkg cGxhY2VzIHRoYXQgd2lsbCBiZSBvZiB1c2UsIG9yIHdoZXRoZXIgbW9ja2luZyB3b3VsZCBzdGls bCBiZSB2aWFibGUgaW4gaW50ZWdyYXRpb24gdGVzdHMgaW5zdGVhZCBvZiBqdXN0IHVuaXQgdGVz dHMsIGJ1dCBpdOKAmXMgZGVmaW5pdGVseSBhIGdvb2QgdG9vbCB0byBoYXZlLiBEbyB5b3Uga25v dyBpZiBKVW5pdCBoYXMgYW55dGhpbmcgdGhhdCBjYW4gaGVscCB3aXRoIHRoYXQ/IEl0IHNlZW1z IGxpa2UgYSBjb21tb24gZW5vdWdoIG5lZWQgdGhhdCBpdCBtaWdodC48YnI+PC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj5UZXN0aW5nIGNvbmN1cnJlbnQgdGhpbmdzIG1heSByZXF1aXJlIG1vcmUg Q29uZGl0aW9ucyBmb3IgdGhyZWFkcyB0byB3YWl0IG9uLiBJdOKAmXMgbm90IGNsZWFyIHRvIG1l IGhvdyBtdWNoIGVmZm9ydCB0aGF0IHdpbGwgcmVxdWlyZSB0byBiZSB2aWFibGUsIG9yIGhvdyBi ZXN0IHRvIGV4cG9zZSB0aGVtLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+LSBTdGV2ZTwvZGl2 PjxkaXY+PGJyPjwvZGl2Pk9uIEZyaSwgQXByIDI2LCAyMDE5IGF0IDY6MzQgQU0sIE1hcnRpbiBC eXJlbmhlaWQgJmx0OzxhIGhyZWY9Im1haWx0bzptYXJ0aW4uYnlyZW5oZWlkQHR1LWRyZXNkZW4u ZGUiIGNsYXNzPSIiPm1hcnRpbi5ieXJlbmhlaWRAdHUtZHJlc2Rlbi5kZTwvYT4mZ3Q7IHdyb3Rl OjxibG9ja3F1b3RlIGNsYXNzPSJwcm90b25tYWlsX3F1b3RlIiB0eXBlPSJjaXRlIj4gIEhlbGxv IGV2ZXJ5b25lLDxicj48YnI+SSd2ZSBzZW50IHRoaXMgbWFpbCBhdCB0aGUgZW5kIG9mIGxhc3Qg eWVhciB0byB0aGlzIGxpc3QgYnV0IGl0IHNlZW1zPGJyPnRoYXQgaXQgbmV2ZXIgbWFkZSBpdCB0 byBpdHMgc3Vic2NyaWJlcnMuIFRodXMsIEknbSB0cnlpbmcgYWdhaW46PGJyPjxicj48YnI+SSBz dGFydGVkIHRvIHJlZmFjdG9yIHNldmVyYWwgcGFydHMgb2YgdGhlIEZyZWVuZXQgQ29kZSB0byBt YWtlIHRoZSBpdDxicj5lYXNpZXIgdG8gdGVzdCBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50 IHBhcnRzIG9mIGl0IGluIGlzb2xhdGlvbi48YnI+QmVmb3JlIEkgY29udGludWUgZG9pbmcgc28s IEkgd291bGQgbGlrZSB0byBrbm93IHlvdXIgdGhvdWdodHMgb24gbXk8YnI+YXBwcm9hY2ggYW5k IHdoZXRoZXIgeW91IHdvdWxkIGFjdHVhbGx5IHdlbGNvbWUgdGhlc2UgY2hhbmdlcy4gWW91IGNh bjxicj5maW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcGFydGlhbGx5IHJlZmFjdG9yZWQg Y29kZSBvbiBHaXRodWIgWzFdLjxicj48YnI+RXNzZW50aWFsbHksIEkgZGlkIHRoZSBmb2xsb3dp bmcgdGhyZWUgY2hhbmdlcyB0byB0aGUgTm9kZS0sPGJyPk5vZGVDcnlwdG8tLFBlZXJNYW5hZ2Vy LSxVZHBTb2NrZXRIYW5kbGVyLSxOb2RlSVBQb3J0RGV0ZWN0b3ItIGFuZDxicj5JUEFkZHJlc3NE ZXRlY3Rvci1jbGFzczo8YnI+PGJyPjEuIENyZWF0ZSBjb3JyZXNwb25kaW5nIEludGVyZmFjZXMg Zm9yIGVhY2ggY2xhc3MuIFRoaXMgYWxsb3dzIHVzIHRvPGJyPnJlcGxhY2UgYWN0dWFsIGNsYXNz IGluc3RhbmNlcyAoZS5nLiBvZiB0aGUgTm9kZSBjbGFzcykgd2l0aCBhPGJyPnRlc3Qtc3BlY2lm aWMgZHVtbXkgaW1wbGVtZW50YXRpb24uIFRoaXMgZHVtbXkgY2FuIHRoZW4gYmUgZ2l2ZW4gYXM8 YnI+cGFyYW1ldGVyIHRvIGEgY29uc3RydWN0b3IuPGJyPjxicj4yLiBFbmNhcHN1bGF0ZSBpbnN0 YW50aWF0aW9uIG9mIGNsYXNzIG1lbWJlcnMgd2l0aGluIHByb3RlY3RlZCBtZXRob2RzLjxicj5C eSBvdmVycmlkaW5nIHRoZXNlIHByb3RlY3RlZCBtZXRob2RzLCB3ZSBjYW4gcmVwbGFjZSBjbGFz cyBtZW1iZXJzIHdpdGg8YnI+dGVzdC1zcGVjaWZpYyBkdW1teSBpbXBsZW1lbnRhdGlvbnMuPGJy Pjxicj4zLiBDcmVhdGUgZ2V0dGVyLU1ldGhvZHMgdG8gYWNjZXNzIGNsYXNzIG1lbWJlcnMuIE1h bnkgY2xhc3NlcyBpbjxicj5GcmVlbmV0IGhvbGQgYSByZWZlcmVuY2UgdG8gYSBOb2RlLWluc3Rh bmNlIGFuZCBzb21lIGRpcmVjdGx5IGFjY2VzcyBpdHM8YnI+bWVtYmVycy4gQmVzaWRlcyB0aGUg ZmFjdCB0aGF0IHRoaXMgaXMgbm90IGEgZ29vZCBwcmFjdGljZSwgaXQga2VwdCBtZTxicj5mcm9t IGNyZWF0aW5nIGFuIGludGVyZmFjZSBmb3IgdGhlIG5vZGUgY2xhc3MuPGJyPjxicj5PbmUgb2Jz dGFjbGUgd2l0aCBwb2ludCAoMSkgd2FzIHRoYXQgdGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hl cmUgYTxicj5jbGFzcyBjYWxscyBhIG5vbi1wdWJsaWMgbWV0aG9kIGZyb20gYW5vdGhlciBjbGFz cyBpbiB0aGUgc2FtZSBwYWNrYWdlLjxicj5UbyBpbGx1c3RyYXRlIG15IGNoYW5nZXMsIGNvbnNp ZGVyIHRoZSBmb2xsb3dpbmcgdGhyZWUgZXhhbXBsZSBjbGFzc2VzOjxicj48YnI+cGFja2FnZSBl eGFtcGxlLkE7PGJyPmNsYXNzIE15Q2xhc3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGJv b2xlYW4gZ2V0Qm9vbCgpIHsgLi4uIH08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBwdWJsaWMg U3RyaW5nIGdldFN0cmluZygpIHsgLi4uIH0mbmJzcDsmbmJzcDsmbmJzcDs8YnI+PGJyPn08YnI+ PGJyPnBhY2thZ2UgZXhhbXBsZS5BOzxicj5jbGFzcyBTYW1lUGFja2FnZUNsYXNzIHs8YnI+Jm5i c3A7IHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7PGJyPjxicj4mbmJzcDsm bmJzcDsmbmJzcDsgaWYgKHJlZi5nZXRCb29sKCkpIC4uLjxicj48YnI+Jm5ic3A7IH08YnI+PGJy Pn08YnI+PGJyPnBhY2thZ2UgZXhhbXBsZS5COzxicj5jbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7 PGJyPjxicj4mbmJzcDsgcHVibGljIE90aGVyUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7PGJy Pjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHJvY2VzcyhyZWYuZ2V0U3RyaW5nKCkpOzxicj48YnI+ Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJyPkJlY2F1c2UgU2FtZVBhY2thZ2VDbGFzcyBpcyB3aXRo aW4gdGhlIHNhbWUgcGFja2FnZSBhcyBNeUNsYXNzLCB0aGU8YnI+Z2V0Qm9vbC1tZXRob2QgaXMg dmlzaWJsZSB0byB0aGUgZm9ybWVyIHdoZXJhcyBvbmx5IGdldFN0cmluZygpIGlzPGJyPnZpc2li bGUgZm9yIHRoZSBPdGhlclBhY2thZ2VDbGFzcy4gQWZ0ZXIgbXkgcmVmYWN0b3JpbmcsIHdlIG5v dyBoYXZlIHRoZTxicj5mb2xsb3dpbmcgMiBpbnRlcmZhY2VzOjxicj48YnI+cGFja2FnZSBleGFt cGxlLkE7PGJyPnB1YmxpYyBpbnRlcmZhY2UgTXlDbGFzcyB7PGJyPjxicj4mbmJzcDsmbmJzcDsm bmJzcDsgU3RyaW5nIGdldFN0cmluZygpOzxicj48YnI+fTxicj48YnI+cGFja2FnZSBleGFtcGxl LkE7PGJyPmludGVyZmFjZSBQcm90ZWN0ZWRNeUNsYXNzIGV4dGVuZHMgTXlDbGFzcyB7PGJyPjxi cj4mbmJzcDsmbmJzcDsmbmJzcDsgYm9vbGVhbiBnZXRCb29sKCk7PGJyPjxicj59PGJyPjxicj5Q bGVhc2Ugbm90ZSB0aGF0IHRoZSBmaXJzdCBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgaW50ZXJmYWNl IHdoaWxlIHRoZTxicj5zZWNvbmQgaW50ZXJmYWNlIGlzIHBhY2thZ2UtbG9jYWwuIFRoZSB0aHJl ZSBleGFtcGxlIGNsYXNzZXMgbm93IGxvb2sgYXM8YnI+Zm9sbG93czo8YnI+PGJyPnBhY2thZ2Ug ZXhhbXBsZS5BOzxicj5jbGFzcyBNeUNsYXNzSW1wbCBpbXBsZW1lbnRzIFByb3RlY3RlZE15Q2xh c3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHB1YmxpYyBib29sZWFuIGdldEJvb2woKSB7 IC4uLiB9PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIFN0cmluZyBnZXRTdHJpbmco KSB7IC4uLiB9Jm5ic3A7Jm5ic3A7Jm5ic3A7PGJyPjxicj59PGJyPjxicj5wYWNrYWdlIGV4YW1w bGUuQTs8YnI+Y2xhc3MgU2FtZVBhY2thZ2VDbGFzcyB7PGJyPiZuYnNwOyBwdWJsaWMgU2FtZVBh Y2thZ2VDbGFzcyhQcm90ZWN0ZWRNeUNsYXNzIHJlZikgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5i c3A7IGlmIChyZWYuZ2V0Qm9vbCgpKSAuLi48YnI+PGJyPiZuYnNwOyB9PGJyPjxicj59PGJyPjxi cj5wYWNrYWdlIGV4YW1wbGUuQjs8YnI+Y2xhc3MgT3RoZXJQYWNrYWdlQ2xhc3Mgezxicj48YnI+ Jm5ic3A7IHB1YmxpYyBPdGhlclBhY2thZ2VDbGFzcyhNeUNsYXNzIHJlZikgezxicj48YnI+Jm5i c3A7Jm5ic3A7Jm5ic3A7IHByb2Nlc3MocmVmLmdldFN0cmluZygpKTs8YnI+PGJyPiZuYnNwOyB9 PGJyPjxicj59PGJyPjxicj5UaGUgZ2V0Qm9vbC1NZXRob2Qgb2YgdGhlIE15Q2xhc3NJbXBsLWNs YXNzIGlzIG5vdyBwdWJsaWMuIEhvd2V2ZXIsIGlmPGJyPmluc3RhbmNlcyBvZiB0aGlzIGNsYXNz IGFyZSBvbmx5IGFjY2Vzc2VkIHZpYSB0aGUgaW50ZXJmYWNlcyBpdCBpcyBvbmx5PGJyPnZpc2li bGUgdG8gY2xhc3NlcyB0aGF0IHVzZSB0aGUgUHJvdGVjdGVkTXlDbGFzcyBpbnRlcmZhY2UuIFRo aXMgd2F5LCB3ZTxicj5tYWludGFpbiB0aGUgcGFja2FnZS1sb2NhbCB2aWV3IGZvciB0aGUgZGlm ZmVyZW50IG1ldGhvZHMuIFdoYXQgZG8geW91PGJyPnRoaW5rIGFib3V0IHRoaXMgc29sdXRpb24/ PGJyPjxicj48YnI+R2l2ZW4gdGhlIGFib3ZlIGNsYXNzZXMsIGFuIGV4YW1wbGUgZm9yIGEgcG9p bnQgKDIpLXJlZmFjdG9yaW5nIGlzIGFzPGJyPmZvbGxvd3M6PGJyPjxicj5jbGFzcyBBbm90aGVy Q2xhc3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IE15Q2xhc3MgcmVmOzxicj48YnI+Jm5i c3A7Jm5ic3A7Jm5ic3A7IHB1YmxpYyBBbm90aGVyQ2xhc3MoaW50IHBhcmFtKSB7PGJyPjxicj4m bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmVmID0gbmV3TXlDbGFzcyhwYXJhbSk7PGJy Pjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgfTxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3Rl Y3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBhcmFtKSB7PGJyPjxicj4mbmJzcDsmbmJzcDsm bmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBuZXcgTXlDbGFzc0ltcGwocGFyYW0pOzxi cj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJyPkluc3RlYWQgb2YgY2Fs bGluZyAibmV3IE15Q2xhc3NJbXBsKHBhcmFtKSIgZGlyZWN0bHkgaW4gdGhlIGNvbnN0cnVjdG9y LDxicj5JIHVzZSBhIHByb3RlY3RlZCBtZXRob2QgbmV3TXlDbGFzcy4gV2hlbiB3cml0aW5nIGEg dGVzdCBjYXNlLCBJIGNhbiBub3c8YnI+ZWFzaWx5IHRlc3QgQW5vdGhlckNsYXNzIHdpdGhvdXQg bmVlZGluZyBhbiBpbnN0YW5jZSBvZiBNeUNsYXNzSW1wbC4gVG88YnI+ZG8gc28sIEkgY3JlYXRl IGEgbWluaW1hbCBjbGFzcyBNeUNsYXNzU3R1YiB0aGF0IGltcGxlbWVudHMgdGhlPGJyPk15Q2xh c3MtaW50ZXJmYWNlIGFuZCBkZXJpdmUgdGhlIGZvbGxvd2luZyBjbGFzczo8YnI+PGJyPmNsYXNz IEluc3RydW1lbnRlZEFub3RoZXJDbGFzcyBleHRlbmRzIEFub3RoZXJDbGFzcyB7PGJyPjxicj4m bmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIEluc3RydW1lbnRlZEFub3RoZXJDbGFzcyhpbnQgcGFy YW0pIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN1cGVyKHBhcmFtKTs8YnI+ Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBAT3ZlcnJpZGU8 YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3RlY3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBh cmFtKSB7PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIG5ldyBN eUNsYXNzU3R1YigpOzxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJy PkFzIGEgcHJvb2Ygb2YgY29uY2VwdCBmb3IgdGhpcyBhcHByb2FjaCwgSSBjcmVhdGVkIHNvbWUg aW5pdGlhbCB1bml0PGJyPnRlc3RzIGZvciB0aGUgTm9kZUNyeXB0b1syXS0gYW5kIE5vZGVJUFBv cnREZXRlY3Rvci1jbGFzc1szXS48YnI+PGJyPlRvIG1lLCB0d28gcG9pbnRzIHRoYXQgYXJlIHN0 aWxsIG9wZW4gd2hlbiBpdCBjb21lcyB0byB0ZXN0cyBhcmU6PGJyPjxicj4tIFRlc3Rpbmcgb2Yg dGltZS1iYXNlZCBjb25kaXRpb25zOiBUbyB0ZXN0IGZ1bmN0aW9uYWxpdGllcyBzdWNoIGFzPGJy PnJhdGUtbGltaXRpbmcgb2YgcmVxdWVzdHMsIHRoZSBjYWxscyB0byBTeXN0ZW0uY3VycmVudFRp bWVNaWxsaXMoKTxicj5wcm9iYWJseSBuZWVkIHRvIGJlIHJlcGxhY2VkIGJ5IGEgY2FsbCB0byBh IG5vbi1zeXN0ZW0taW50ZXJmYWNlIHdpdGggYTxicj5zaW1pbGFyIG1ldGhvZCwgd2hvc2UgaW1w bGVtZW50YXRpb24gY2FuIHRoZW4gYmUgYWRhcHRlZCB0byB0ZXN0IGNhc2VzLjxicj48YnI+LSBD b25jdXJyZW5jeTogSSBkaWRuJ3QgeWV0IHNwZW5kIG11Y2ggdGltZSB0aGlua2luZyBhYm91dCBo b3cgY2xhc3Nlczxicj5jYW4gYmUgdGVzdGVkIHRoYXQgd2FpdCBmb3Igb3RoZXIgdGhyZWFkcyB0 byBvcGVyYXRlIChlLmcuIGxvY2F0aW9uPGJyPnN3YXBwaW5nKSBidXQgSSBhbSBvcHRpbWlzdGlj IHRoYXQgdGhpcyBjYW4gYmUgZG9uZS48YnI+PGJyPjxicj5LaW5kIHJlZ2FyZHMsPGJyPk1hcnRp bjxicj48YnI+PGJyPlsxXSBodHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9mcmVkL2NvbW1pdHMv dGVzdGluZy1yZWZhY3RvcmluZzxicj48YnI+WzJdPGJyPmh0dHBzOi8vZ2l0aHViLmNvbS95YWRl dmVsL2ZyZWQvYmxvYi90ZXN0aW5nLXJlZmFjdG9yaW5nL3Rlc3QvZnJlZW5ldC9ub2RlL05vZGVD cnlwdG9UZXN0LmphdmE8YnI+PGJyPlszXTxicj5odHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9m cmVkL2Jsb2IvdGVzdGluZy1yZWZhY3RvcmluZy90ZXN0L2ZyZWVuZXQvbm9kZS9Ob2RlSVBQb3J0 RGV0ZWN0b3JUZXN0LmphdmE8YnI+PGJyPi0tPGJyPk1hcnRpbiBCeXJlbmhlaWQ8YnI+U2NpZW50 aWZpYyBBc3Npc3RhbnQ8YnI+PGJyPlRlY2huaXNjaGUgVW5pdmVyc2l0w6R0IERyZXNkZW48YnI+ RmFjdWx0eSBvZiBDb21wdXRlciBTY2llbmNlPGJyPkluc3RpdHV0ZSBvZiBTeXN0ZW0gQXJjaGl0 ZWN0dXJlPGJyPkNoYWlyIG9mIFByaXZhY3kgYW5kIERhdGEgU2VjdXJpdHk8YnI+MDEwNjIgRHJl c2Rlbjxicj48YnI+VGVsLjogKzQ5IDM1MSA0NjMgMzgyMzU8YnI+R1BHIDogRjE0NCBGQkNEIEYw QzIgMjU3QSA4N0VEICAgICAgIENGREUgMjRFQiBFNjg0IEQwQkUgRTc4NTxicj48YnI+PGJyPjwv YmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj4= --b1_43b82ff42461de15096c1434c769a311--