------=_Part_12692_16382710.1215441027090 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline 2008/7/2, Thiago Macieira : > Ok, I have finally got my act together and reviewed the patch. Thanks for the quite in-depth review. I have tried to address the points you've raised in the attached patch. [..] > Why do we need a static function to return the instance to call > lookupHost()? Can't lookupHost() be static instead? There is a rather stylistic reason: if state is involved this should be exposed to the user and not hidden by static methods (as in KIO::Scheduler). But as the cache and the list of processed queries (the state maintained by the HostInfoAgentPrivate instance) is transparent to the user, this argument is not really conclusive and I have therefore reduced the HostInfoAgent class to a mere function. [..] > The same in: > + if (openQueries.contains(hostName)) { > + Query* query = openQueries.value(hostName); > > Please use an iterator and compare to openQueries.end() to see if the > object is there. openQueries has type QHash and so I've replaced the double lookup (which is not really hurting because of O(1) complexity in the average case) by a test for 0. It is somewhat surprising that your approach is apparently only available for the STL iterator interface but not for Java-style iterators. > In all, your patch is very good and very clever. The only drawback (= > possible future improvement) is the fact that the IP addresses will be > tried always in the same order. Right now, the DNS server will change the > order in a round-robin fashion at every request. According to [1] the addreses returned by getaddrinfo() (glibc version) are ordered: "The important thing to remember here is that the addresses are returned in an order where the first returned address has the highest probability to succeed." [1] http://people.redhat.com/drepper/userapi-ipv6.html Roland ------=_Part_12692_16382710.1215441027090 Content-Type: text/x-patch; name=kdelibs-DNS-cache.patch Content-Transfer-Encoding: base64 X-Attachment-Id: file0 Content-Disposition: attachment; filename=kdelibs-DNS-cache.patch ZGlmZiAtLWdpdCBhL2tpby9DTWFrZUxpc3RzLnR4dCBiL2tpby9DTWFrZUxpc3RzLnR4dAppbmRl eCAwZTZmMTQ5Li5kMGI0ZWUwIDEwMDY0NAotLS0gYS9raW8vQ01ha2VMaXN0cy50eHQKKysrIGIv a2lvL0NNYWtlTGlzdHMudHh0CkBAIC0xMTYsNiArMTE2LDcgQEAgc2V0KGtpb2NvcmVfU1RBVF9T UkNTCiAgIGtpby9zbGF2ZWludGVyZmFjZS5jcHAKICAga2lvL3RjcHNsYXZlYmFzZS5jcHAKICAg a2lvL3Vkc2VudHJ5LmNwcAorICBraW8vaG9zdGluZm8uY3BwCiApCiAKIHF0NF9hZGRfZGJ1c19h ZGFwdG9yKGtpb2NvcmVfU1RBVF9TUkNTIGtpby9vcmcua2RlLmtpby5GaWxlVW5kb01hbmFnZXIu eG1sIGZpbGV1bmRvbWFuYWdlcl9wLmggS0lPOjpGaWxlVW5kb01hbmFnZXJQcml2YXRlIGZpbGV1 bmRvbWFuYWdlcl9hZGFwdG9yIEtJT0ZpbGVVbmRvTWFuYWdlckFkYXB0b3IpCmRpZmYgLS1naXQg YS9raW8va2lvL2dsb2JhbC5oIGIva2lvL2tpby9nbG9iYWwuaAppbmRleCBiMWZjYmM1Li40ZTVk MTBiIDEwMDY0NAotLS0gYS9raW8va2lvL2dsb2JhbC5oCisrKyBiL2tpby9raW8vZ2xvYmFsLmgK QEAgLTE3Nyw3ICsxNzcsOCBAQCBuYW1lc3BhY2UgS0lPCiAgICAgQ01EX1JFQUQgPSAnWicsIC8v IDkwCiAgICAgQ01EX1dSSVRFID0gOTEsCiAgICAgQ01EX1NFRUsgPSA5MiwKLSAgICBDTURfQ0xP U0UgPSA5MworICAgIENNRF9DTE9TRSA9IDkzLAorICAgIENNRF9IT1NUX0lORk8gPSA5NAogICAg IC8vIEFkZCBuZXcgb25lcyBoZXJlIG9uY2UgYSByZWxlYXNlIGlzIGRvbmUsIHRvIGF2b2lkIGJy ZWFraW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5LgogICAgIC8vIE5vdGUgdGhhdCBwcm90b2NvbC1z cGVjaWZpYyBjb21tYW5kcyBzaG91bGRuJ3QgYmUgYWRkZWQgaGVyZSwgYnV0IHNob3VsZCB1c2Ug c3BlY2lhbC4KICAgfTsKZGlmZiAtLWdpdCBhL2tpby9raW8vaG9zdGluZm8uY3BwIGIva2lvL2tp by9ob3N0aW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4YThj YwotLS0gL2Rldi9udWxsCisrKyBiL2tpby9raW8vaG9zdGluZm8uY3BwCkBAIC0wLDAgKzEsMTQ0 IEBACisvKgorQ29weXJpZ2h0IDIwMDggUm9sYW5kIEhhcm5hdSA8dGF1QGdteC5ldT4KKworVGhp cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSB2ZXJzaW9uIDMsIG9yIGFueQorbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVy c2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCitzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJl cnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBp biBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCitUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYyAKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiaG9z dGluZm9fcC5oIgorCisjaW5jbHVkZSA8a2dsb2JhbC5oPgorI2luY2x1ZGUgPFF0Q29yZS9RU3Ry aW5nPgorI2luY2x1ZGUgPFF0Q29yZS9RSGFzaD4KKyNpbmNsdWRlIDxRdENvcmUvUUNhY2hlPgor I2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNpbmNsdWRlIDxRdENvcmUvUUxpc3Q+CisjaW5jbHVk ZSA8UXRDb3JlL1FQYWlyPgorI2luY2x1ZGUgPFF0Q29yZS9RRnV0dXJlV2F0Y2hlcj4KKyNpbmNs dWRlIDxRdENvcmUvUXRDb25jdXJyZW50UnVuPgorI2luY2x1ZGUgPFF0TmV0d29yay9RSG9zdElu Zm8+CisKKyNkZWZpbmUgVFRMIDMwMAorCituYW1lc3BhY2UgS0lPCit7CisgICAgY2xhc3MgSG9z dEluZm9BZ2VudFByaXZhdGUgOiBwdWJsaWMgUU9iamVjdAorICAgIHsKKyAgICAgICAgUV9PQkpF Q1QKKyAgICBwdWJsaWM6CisgICAgICAgIEhvc3RJbmZvQWdlbnRQcml2YXRlKGludCBjYWNoZVNp emUgPSAxMDApOworICAgICAgICB2aXJ0dWFsIH5Ib3N0SW5mb0FnZW50UHJpdmF0ZSgpIHt9Owor ICAgICAgICB2b2lkIGxvb2t1cEhvc3QoY29uc3QgUVN0cmluZyYgaG9zdE5hbWUsIFFPYmplY3Qq IHJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIpOworICAgIHByaXZhdGUgc2xvdHM6CisgICAg ICAgIHZvaWQgcXVlcnlGaW5pc2hlZChjb25zdCBRSG9zdEluZm8mKTsKKyAgICBwcml2YXRlOgor ICAgICAgICBjbGFzcyBSZXN1bHQ7CisgICAgICAgIGNsYXNzIFF1ZXJ5OworCisgICAgICAgIFFI YXNoPFFTdHJpbmcsIFF1ZXJ5Kj4gb3BlblF1ZXJpZXM7CisgICAgICAgIFFDYWNoZTxRU3RyaW5n LCBRUGFpcjxRSG9zdEluZm8sIFFUaW1lPiA+IGRuc0NhY2hlOworICAgIH07CisKKyAgICBjbGFz cyBIb3N0SW5mb0FnZW50UHJpdmF0ZTo6UmVzdWx0IDogcHVibGljIFFPYmplY3QKKyAgICB7Cisg ICAgICAgIFFfT0JKRUNUCisgICAgc2lnbmFsczoKKyAgICAgICAgdm9pZCByZXN1bHQoUUhvc3RJ bmZvKTsKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgSG9zdEluZm9BZ2VudFBy aXZhdGU7CisgICAgfTsKKworICAgIGNsYXNzIEhvc3RJbmZvQWdlbnRQcml2YXRlOjpRdWVyeSA6 IHB1YmxpYyBRT2JqZWN0CisgICAgeworICAgICAgICBRX09CSkVDVAorICAgIHB1YmxpYzoKKyAg ICAgICAgUXVlcnkoKTogbV93YXRjaGVyKCksIG1faG9zdE5hbWUoKQorICAgICAgICB7CisgICAg ICAgICAgICBjb25uZWN0KCZtX3dhdGNoZXIsIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0xP VChyZWxheUZpbmlzaGVkKCkpKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHN0YXJ0KGNvbnN0 IFFTdHJpbmcmIGhvc3ROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBtX2hvc3ROYW1lID0g aG9zdE5hbWU7CisgICAgICAgICAgICBRRnV0dXJlPFFIb3N0SW5mbz4gZnV0dXJlID0gUXRDb25j dXJyZW50OjpydW4oJlFIb3N0SW5mbzo6ZnJvbU5hbWUsIGhvc3ROYW1lKTsKKyAgICAgICAgICAg IG1fd2F0Y2hlci5zZXRGdXR1cmUoZnV0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBRU3RyaW5n IGhvc3ROYW1lKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faG9zdE5h bWU7CisgICAgICAgIH0KKyAgICBzaWduYWxzOgorICAgICAgICB2b2lkIHJlc3VsdChRSG9zdElu Zm8pOworICAgIHByaXZhdGUgc2xvdHM6CisgICAgICAgIHZvaWQgcmVsYXlGaW5pc2hlZCgpCisg ICAgICAgIHsKKyAgICAgICAgICAgIGVtaXQgcmVzdWx0KG1fd2F0Y2hlci5yZXN1bHQoKSk7Cisg ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBRRnV0dXJlV2F0Y2hlcjxRSG9zdEluZm8+ IG1fd2F0Y2hlcjsKKyAgICAgICAgUVN0cmluZyBtX2hvc3ROYW1lOworICAgIH07Cit9CisKK3Vz aW5nIG5hbWVzcGFjZSBLSU87CisKK0tfR0xPQkFMX1NUQVRJQyhIb3N0SW5mb0FnZW50UHJpdmF0 ZSwgaG9zdEluZm9BZ2VudFByaXZhdGUpOworCit2b2lkIEhvc3RJbmZvOjpsb29rdXBIb3N0KGNv bnN0IFFTdHJpbmcmIGhvc3ROYW1lLCBRT2JqZWN0KiByZWNlaXZlciwKKyAgICBjb25zdCBjaGFy KiBtZW1iZXIpCit7CisgICAgaG9zdEluZm9BZ2VudFByaXZhdGUtPmxvb2t1cEhvc3QoaG9zdE5h bWUsIHJlY2VpdmVyLCBtZW1iZXIpOworfQorCitIb3N0SW5mb0FnZW50UHJpdmF0ZTo6SG9zdElu Zm9BZ2VudFByaXZhdGUoaW50IGNhY2hlU2l6ZSkgOiBvcGVuUXVlcmllcygpLAorICAgIGRuc0Nh Y2hlKGNhY2hlU2l6ZSkge30KKwordm9pZCBIb3N0SW5mb0FnZW50UHJpdmF0ZTo6bG9va3VwSG9z dChjb25zdCBRU3RyaW5nJiBob3N0TmFtZSwKKyAgICBRT2JqZWN0KiByZWNlaXZlciwgY29uc3Qg Y2hhciogbWVtYmVyKQoreworICAgIGlmIChRUGFpcjxRSG9zdEluZm8sIFFUaW1lPiogaW5mbyA9 IGRuc0NhY2hlLm9iamVjdChob3N0TmFtZSkpIHsKKyAgICAgICAgaWYgKFFUaW1lOjpjdXJyZW50 VGltZSgpIDw9IGluZm8tPnNlY29uZC5hZGRTZWNzKFRUTCkpIHsKKyAgICAgICAgICAgIFJlc3Vs dCByZXN1bHQ7CisgICAgICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KCZyZXN1bHQsIFNJR05BTChy ZXN1bHQoUUhvc3RJbmZvKSkscmVjZWl2ZXIsIG1lbWJlcik7CisgICAgICAgICAgICBlbWl0IHJl c3VsdC5yZXN1bHQoaW5mby0+Zmlyc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIGRuc0NhY2hlLnJlbW92ZShob3N0TmFtZSk7CisgICAgfQorCisgICAgaWYgKFF1 ZXJ5KiBxdWVyeSA9IG9wZW5RdWVyaWVzLnZhbHVlKGhvc3ROYW1lKSkgeworICAgICAgICBjb25u ZWN0KHF1ZXJ5LCBTSUdOQUwocmVzdWx0KFFIb3N0SW5mbykpLCByZWNlaXZlciwgbWVtYmVyKTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFF1ZXJ5KiBxdWVyeSA9IG5ldyBRdWVyeSgp OworICAgIG9wZW5RdWVyaWVzLmluc2VydChob3N0TmFtZSwgcXVlcnkpOworICAgIGNvbm5lY3Qo cXVlcnksIFNJR05BTChyZXN1bHQoUUhvc3RJbmZvKSksIHRoaXMsIFNMT1QocXVlcnlGaW5pc2hl ZChRSG9zdEluZm8pKSk7CisgICAgY29ubmVjdChxdWVyeSwgU0lHTkFMKHJlc3VsdChRSG9zdElu Zm8pKSwgcmVjZWl2ZXIsIG1lbWJlcik7CisgICAgcXVlcnktPnN0YXJ0KGhvc3ROYW1lKTsKK30K Kwordm9pZCBIb3N0SW5mb0FnZW50UHJpdmF0ZTo6cXVlcnlGaW5pc2hlZChjb25zdCBRSG9zdElu Zm8mIGluZm8pCit7CisgICAgUXVlcnkqIHF1ZXJ5ID0gc3RhdGljX2Nhc3Q8UXVlcnkqID4oc2Vu ZGVyKCkpOworICAgIG9wZW5RdWVyaWVzLnJlbW92ZShxdWVyeS0+aG9zdE5hbWUoKSk7CisgICAg aWYgKGluZm8uZXJyb3IoKSA9PSBRSG9zdEluZm86Ok5vRXJyb3IpIHsKKyAgICAgICAgZG5zQ2Fj aGUuaW5zZXJ0KHF1ZXJ5LT5ob3N0TmFtZSgpLAorICAgICAgICAgICAgbmV3IFFQYWlyPFFIb3N0 SW5mbywgUVRpbWU+KGluZm8sIFFUaW1lOjpjdXJyZW50VGltZSgpKSk7CisgICAgfQorICAgIHF1 ZXJ5LT5kZWxldGVMYXRlcigpOworfQorCisjaW5jbHVkZSAiaG9zdGluZm8ubW9jIgpkaWZmIC0t Z2l0IGEva2lvL2tpby9ob3N0aW5mb19wLmggYi9raW8va2lvL2hvc3RpbmZvX3AuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDczMDc0Ci0tLSAvZGV2L251bGwKKysrIGIv a2lvL2tpby9ob3N0aW5mb19wLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKK0NvcHlyaWdodCAyMDA4 ICBSb2xhbmQgSGFybmF1IDx0YXVAZ214LmV1PgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55Cits YXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBp dHMKK3N1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdo aWNoIHNoYWxsCithY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9u IDMgb2YgdGhlIGxpY2Vuc2UuCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIAorTGljZW5z ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgSE9TVElORk9fSF8KKyNkZWZpbmUgSE9TVElO Rk9fSF8KKworI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nPgorI2luY2x1ZGUgPFF0Q29yZS9RT2Jq ZWN0PgorCituYW1lc3BhY2UgS0lPCit7CisgICAgbmFtZXNwYWNlIEhvc3RJbmZvCisgICAgewor ICAgICAgICB2b2lkIGxvb2t1cEhvc3QoY29uc3QgUVN0cmluZyYgaG9zdE5hbWUsIFFPYmplY3Qq IHJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIpOworICAgIH0KK30KKworI2VuZGlmCmRpZmYg LS1naXQgYS9raW8va2lvL3NsYXZlYmFzZS5jcHAgYi9raW8va2lvL3NsYXZlYmFzZS5jcHAKaW5k ZXggNTllNGRmYi4uNGRjMTUwYyAxMDA2NDQKLS0tIGEva2lvL2tpby9zbGF2ZWJhc2UuY3BwCisr KyBiL2tpby9raW8vc2xhdmViYXNlLmNwcApAQCAtMTMzNSwzICsxMzM1LDM2IEBAIHZvaWQgU2xh dmVCYXNlOjpzZW5kKGludCBjbWQsIGNvbnN0IFFCeXRlQXJyYXkmIGFyciApCiAKIHZvaWQgU2xh dmVCYXNlOjp2aXJ0dWFsX2hvb2soIGludCwgdm9pZCogKQogeyAvKkJBU0U6OnZpcnR1YWxfaG9v ayggaWQsIGRhdGEgKTsqLyB9CisKK3ZvaWQgU2xhdmVCYXNlOjpsb29rdXBIb3N0KGNvbnN0IFFT dHJpbmcmIGhvc3QpCit7CisgICAgS0lPX0RBVEEgPDwgaG9zdDsKKyAgICBzZW5kKE1TR19IT1NU X0lORk9fUkVRLCBkYXRhKTsKK30KKworaW50IFNsYXZlQmFzZTo6d2FpdEZvckhvc3RJbmZvKFFI b3N0SW5mbyYgaW5mbykKK3sKKyAgICBRQnl0ZUFycmF5IGRhdGE7CisgICAgaW50IHJlc3VsdCA9 IHdhaXRGb3JBbnN3ZXIoQ01EX0hPU1RfSU5GTywgMCwgZGF0YSk7CisKKyAgICBpZiAocmVzdWx0 ICA9PSAtMSkgeworICAgICAgICBpbmZvLnNldEVycm9yKFFIb3N0SW5mbzo6VW5rbm93bkVycm9y KTsKKyAgICAgICAgaW5mby5zZXRFcnJvclN0cmluZygiVW5rbm93biBFcnJvci4iKTsKKyAgICAg ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBRRGF0YVN0cmVhbSBzdHJlYW0oZGF0YSk7 CisgICAgUVN0cmluZyBob3N0TmFtZTsKKyAgICBRTGlzdDxRSG9zdEFkZHJlc3M+IGFkZHJlc3Nl czsKKyAgICBpbnQgZXJyb3I7CisgICAgUVN0cmluZyBlcnJvclN0cmluZzsKKworICAgIHN0cmVh bSA+PiBob3N0TmFtZSA+PiBhZGRyZXNzZXMgPj4gZXJyb3IgPj4gZXJyb3JTdHJpbmc7CisKKyAg ICBpbmZvLnNldEhvc3ROYW1lKGhvc3ROYW1lKTsKKyAgICBpbmZvLnNldEFkZHJlc3NlcyhhZGRy ZXNzZXMpOworICAgIGluZm8uc2V0RXJyb3IoUUhvc3RJbmZvOjpIb3N0SW5mb0Vycm9yKGVycm9y KSk7CisgICAgaW5mby5zZXRFcnJvclN0cmluZyhlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4g cmVzdWx0OworfQpkaWZmIC0tZ2l0IGEva2lvL2tpby9zbGF2ZWJhc2UuaCBiL2tpby9raW8vc2xh dmViYXNlLmgKaW5kZXggMjVjYzE0OC4uZDYzODY1MiAxMDA2NDQKLS0tIGEva2lvL2tpby9zbGF2 ZWJhc2UuaAorKysgYi9raW8va2lvL3NsYXZlYmFzZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j bHVkZSA8a2xvY2FsZS5oPgogCiAjaW5jbHVkZSA8UXRDb3JlL1FCeXRlQXJyYXk+CisjaW5jbHVk ZSA8UXROZXR3b3JrL1FIb3N0SW5mbz4KIAogY2xhc3MgS0NvbmZpZ0dyb3VwOwogY2xhc3MgS1Jl bW90ZUVuY29kaW5nOwpAQCAtNzkwLDYgKzc5MSwxNiBAQCBwdWJsaWM6CiAgICAgICovCiAgICAg dm9pZCBzZXRLaWxsRmxhZygpOwogCisgICAgLyoqIEludGVybmFsbHkgdXNlZAorICAgICAgKiBA aW50ZXJuYWwKKyAgICAqLworICAgIHZvaWQgbG9va3VwSG9zdChjb25zdCBRU3RyaW5nJiBob3N0 KTsKKworICAgIC8qKiBJbnRlcm5hbGx5IHVzZWQKKyAgICAgICogQGludGVybmFsCisgICAgKi8K KyAgICBpbnQgd2FpdEZvckhvc3RJbmZvKFFIb3N0SW5mbyYgaW5mbyk7CisKIHByb3RlY3RlZDoK ICAgICAvKioKICAgICAgKiBOYW1lIG9mIHRoZSBwcm90b2NvbCBzdXBwb3J0ZWQgYnkgdGhpcyBz bGF2ZQpkaWZmIC0tZ2l0IGEva2lvL2tpby9zbGF2ZWludGVyZmFjZS5jcHAgYi9raW8va2lvL3Ns YXZlaW50ZXJmYWNlLmNwcAppbmRleCA4ZTQxZWE3Li5kYTE4NjM1IDEwMDY0NAotLS0gYS9raW8v a2lvL3NsYXZlaW50ZXJmYWNlLmNwcAorKysgYi9raW8va2lvL3NsYXZlaW50ZXJmYWNlLmNwcApA QCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAic2xhdmViYXNlLmgiCiAjaW5jbHVkZSAiY29u bmVjdGlvbi5oIgorI2luY2x1ZGUgImhvc3RpbmZvX3AuaCIKICNpbmNsdWRlIDxlcnJuby5oPgog I2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgpAQCAtMzM2LDcgKzMzNywx MyBAQCBib29sIFNsYXZlSW50ZXJmYWNlOjpkaXNwYXRjaCggaW50IF9jbWQsIGNvbnN0IFFCeXRl QXJyYXkgJnJhd2RhdGEgKQogICAgICAgICBlbWl0IG5lZWRTdWJVcmxEYXRhKCk7CiAgICAgICAg IGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGNhc2UgTVNHX0hPU1RfSU5GT19SRVE6 IHsKKyAgICAgICAgUVN0cmluZyBob3N0TmFtZTsKKyAgICAgICAgc3RyZWFtID4+IGhvc3ROYW1l OworICAgICAgICBIb3N0SW5mbzo6bG9va3VwSG9zdChob3N0TmFtZSwgdGhpcywgU0xPVChzbG90 SG9zdEluZm8oUUhvc3RJbmZvKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVs dDogCiAgICAgICAgIGtXYXJuaW5nKDcwMDcpIDw8ICJTbGF2ZSBzZW5kcyB1bmtub3duIGNvbW1h bmQgKCIgPDwgX2NtZCA8PCAiKSwgZHJvcHBpbmcgc2xhdmUiOwogICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgfQpAQCAtNDk2LDQgKzUwMywxMiBAQCBpbnQgU2xhdmVJbnRlcmZhY2VQcml2YXRl OjptZXNzYWdlQm94KGludCB0eXBlLCBjb25zdCBRU3RyaW5nICZ0ZXh0LAogICAgIHJldHVybiBy ZXN1bHQ7CiB9CiAKK3ZvaWQgU2xhdmVJbnRlcmZhY2VQcml2YXRlOjpzbG90SG9zdEluZm8oY29u c3QgUUhvc3RJbmZvJiBpbmZvKQoreworICAgIFFCeXRlQXJyYXkgZGF0YTsKKyAgICBRRGF0YVN0 cmVhbSBzdHJlYW0oJmRhdGEsIFFJT0RldmljZTo6V3JpdGVPbmx5KTsKKyAgICBzdHJlYW0gPDwg IGluZm8uaG9zdE5hbWUoKSA8PCBpbmZvLmFkZHJlc3NlcygpIDw8IGluZm8uZXJyb3IoKSA8PCBp bmZvLmVycm9yU3RyaW5nKCk7CisgICAgY29ubmVjdGlvbi0+c2VuZChDTURfSE9TVF9JTkZPLCBk YXRhKTsKK30KKwogI2luY2x1ZGUgInNsYXZlaW50ZXJmYWNlLm1vYyIKZGlmZiAtLWdpdCBhL2tp by9raW8vc2xhdmVpbnRlcmZhY2UuaCBiL2tpby9raW8vc2xhdmVpbnRlcmZhY2UuaAppbmRleCBk MTdjNWMyLi4zY2RjMmFlIDEwMDY0NAotLS0gYS9raW8va2lvL3NsYXZlaW50ZXJmYWNlLmgKKysr IGIva2lvL2tpby9zbGF2ZWludGVyZmFjZS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CiAKICNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDxRdE5l dHdvcmsvUUhvc3RJbmZvPgogCiAjaW5jbHVkZSA8a2lvL2dsb2JhbC5oPgogI2luY2x1ZGUgPGtp by91ZHNlbnRyeS5oPgpAQCAtODIsNyArODMsOCBAQCBjbGFzcyBTbGF2ZUludGVyZmFjZVByaXZh dGU7CiAgICBNU0dfQVVUSF9LRVksIC8vIDExNSAvLyBkZXByZWNhdGVkLgogICAgTVNHX0RFTF9B VVRIX0tFWSwgLy8gZGVwcmVjYXRlZC4KICAgIE1TR19PUEVORUQsCi0gICBNU0dfV1JJVFRFTgor ICAgTVNHX1dSSVRURU4sCisgICBNU0dfSE9TVF9JTkZPX1JFUQogICAgLy8gYWRkIG5ldyBvbmVz IGhlcmUgb25jZSBhIHJlbGVhc2UgaXMgZG9uZSwgdG8gYXZvaWQgYnJlYWtpbmcgYmluYXJ5IGNv bXBhdGliaWxpdHkKICB9OwogCkBAIC0xNjksMTAgKzE3MSwxMSBAQCBwcm90ZWN0ZWQ6CiAKIHBy b3RlY3RlZCBRX1NMT1RTOgogICAgIHZvaWQgY2FsY1NwZWVkKCk7Ci0KIHByb3RlY3RlZDoKICAg ICBTbGF2ZUludGVyZmFjZVByaXZhdGUqIGNvbnN0IGRfcHRyOwogICAgIFFfREVDTEFSRV9QUklW QVRFKFNsYXZlSW50ZXJmYWNlKQorcHJpdmF0ZToKKyAgICBRX1BSSVZBVEVfU0xPVChkX2Z1bmMo KSwgdm9pZCBzbG90SG9zdEluZm8oUUhvc3RJbmZvKSkKIH07CiAKIH0KZGlmZiAtLWdpdCBhL2tp by9raW8vc2xhdmVpbnRlcmZhY2VfcC5oIGIva2lvL2tpby9zbGF2ZWludGVyZmFjZV9wLmgKaW5k ZXggMDhhYmJjNy4uMTlhZDdiYSAxMDA2NDQKLS0tIGEva2lvL2tpby9zbGF2ZWludGVyZmFjZV9w LmgKKysrIGIva2lvL2tpby9zbGF2ZWludGVyZmFjZV9wLmgKQEAgLTIxLDcgKzIxLDggQEAKIAog I2luY2x1ZGUgImdsb2JhbC5oIgogI2luY2x1ZGUgImNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlIDxR VGltZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FUaW1lcj4KKyNpbmNsdWRlIDxRdE5ldHdvcmsvUUhv c3RJbmZvPgogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heF9udW1zID0gODsKIApAQCAt NTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgaW50IG1lc3NhZ2VCb3goaW50IHR5cGUsIGNvbnN0 IFFTdHJpbmcgJnRleHQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAg IGNvbnN0IFFTdHJpbmcgJmJ1dHRvblllcywgY29uc3QgUVN0cmluZyAmYnV0dG9uTm8sIGNvbnN0 IFFTdHJpbmcgJmRvbnRBc2tBZ2Fpbk5hbWUpOwogCisgICAgdm9pZCBzbG90SG9zdEluZm8oY29u c3QgUUhvc3RJbmZvJiBpbmZvKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2lvL2tpby90 Y3BzbGF2ZWJhc2UuY3BwIGIva2lvL2tpby90Y3BzbGF2ZWJhc2UuY3BwCmluZGV4IGE5ZjFhYmYu LjJlMTA5MjAgMTAwNjQ0Ci0tLSBhL2tpby9raW8vdGNwc2xhdmViYXNlLmNwcAorKysgYi9raW8v a2lvL3RjcHNsYXZlYmFzZS5jcHAKQEAgLTIsNyArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw MDAgQWxleCBaZXBlZGEgPHppcHppcHB5QHNvbmljLm5ldAogICogQ29weXJpZ2h0IChDKSAyMDAx LTIwMDMgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg MjAwMSBEYXdpdCBBbGVtYXllaHUgPGFkYXdpdEBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy MDA3LDIwMDggQW5kcmVhcyBIYXJ0bWV0eiA8YWhhcnRtZXR6QGdtYWlsLmNvbT4KKyAqIENvcHly aWdodCAoQykgMjAwNywyMDA4IEFuZHJlYXMgSGFydG1ldHogPGFoYXJ0bWV0ekBnbWFpbC5jb20+ IAorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvbGFuZCBIYXJuYXUgPHRhdUBnbXguZXU+CiAgKgog ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAgKgpAQCAtNDYsNiArNDcs NyBAQAogCiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogI2luY2x1ZGUgPFF0Q29yZS9RRGF0YVN0cmVh bT4KKyNpbmNsdWRlIDxRdENvcmUvUVRpbWU+CiAjaW5jbHVkZSA8UXROZXR3b3JrL1FUY3BTb2Nr ZXQ+CiAjaW5jbHVkZSA8UXROZXR3b3JrL1FIb3N0SW5mbz4KICNpbmNsdWRlIDxRdERCdXMvUXRE QnVzPgpAQCAtMjcxLDcgKzI3Myw2IEBAIGJvb2wgVENQU2xhdmVCYXNlOjpjb25uZWN0VG9Ib3N0 KGNvbnN0IFFTdHJpbmcgJi8qcHJvdG9jb2wqLywKICAgICAgICAgfQogICAgIH0KIAotCiAgICAg S1RjcFNvY2tldDo6U3NsVmVyc2lvbiB0cnlTc2xWZXJzaW9uID0gS1RjcFNvY2tldDo6VGxzVjE7 CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgZGlzY29ubmVjdEZyb21Ib3N0KCk7ICAvL1Jl c2V0IHNvbWUgc3RhdGUsIGV2ZW4gaWYgd2UgYXJlIGFscmVhZHkgZGlzY29ubmVjdGVkCkBAIC0y NzksMjYgKzI4MCwzNyBAQCBib29sIFRDUFNsYXZlQmFzZTo6Y29ubmVjdFRvSG9zdChjb25zdCBR U3RyaW5nICYvKnByb3RvY29sKi8sCiAKICAgICAgICAgLy9GSVhNRSEgS1RjcFNvY2tldCBkb2Vz bid0IGtub3cgb3IgY2FyZSBhYm91dCBwcm90b2NvbCBwb3J0cyEgRml4IGl0IHRoZXJlLCB0aGVu IHVzZSBpdCBoZXJlLgogCi0gICAgICAgIGtEZWJ1Zyg3MDI5KSA8PCAiYmVmb3JlIGNvbm5lY3RU b0hvc3Q6IFNvY2tldCBlcnJvciBpcyIKLSAgICAgICAgICAgICAgICAgICAgPDwgZC0+c29ja2V0 LmVycm9yKCkgPDwgIiwgU29ja2V0IHN0YXRlIGlzIiA8PCBkLT5zb2NrZXQuc3RhdGUoKTsKLSAg ICAgICAgZC0+c29ja2V0LmNvbm5lY3RUb0hvc3QoaG9zdCwgcG9ydCk7Ci0gICAgICAgIGtEZWJ1 Zyg3MDI5KSA8PCAiYWZ0ZXIgY29ubmVjdFRvSG9zdDogU29ja2V0IGVycm9yIGlzIgotICAgICAg ICAgICAgICAgICAgICA8PCBkLT5zb2NrZXQuZXJyb3IoKSA8PCAiLCBTb2NrZXQgc3RhdGUgaXMi IDw8IGQtPnNvY2tldC5zdGF0ZSgpOwotCi0gICAgICAgIGJvb2wgY29ubmVjdE9rID0gZC0+c29j a2V0LndhaXRGb3JDb25uZWN0ZWQoZC0+dGltZW91dCA+IC0xID8gZC0+dGltZW91dCAqIDEwMDAg OiAtMSk7Ci0gICAgICAgIGtEZWJ1Zyg3MDI5KSA8PCAiYWZ0ZXIgd2FpdEZvckNvbm5lY3RlZDog U29ja2V0IGVycm9yIGlzIgotICAgICAgICAgICAgICAgICAgICA8PCBkLT5zb2NrZXQuZXJyb3Io KSA8PCAiLCBTb2NrZXQgc3RhdGUgaXMiIDw8IGQtPnNvY2tldC5zdGF0ZSgpCi0gICAgICAgICAg ICAgICAgICAgIDw8ICIsIHdhaXRGb3JDb25uZWN0ZWQgcmV0dXJuZWQgIiA8PCBjb25uZWN0T2s7 Ci0KLSAgICAgICAgaWYgKGQtPnNvY2tldC5zdGF0ZSgpICE9IEtUY3BTb2NrZXQ6OkNvbm5lY3Rl ZFN0YXRlKSB7Ci0gICAgICAgICAgICBpZiAoZC0+c29ja2V0LmVycm9yKCkgPT0gS1RjcFNvY2tl dDo6SG9zdE5vdEZvdW5kRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBlcnJvcihFUlJfVU5LTk9X Tl9IT1NULAotICAgICAgICAgICAgICAgICAgICAgIGhvc3QgKyBRTGF0aW4xU3RyaW5nKCI6ICIp ICsgZC0+c29ja2V0LmVycm9yU3RyaW5nKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgUUxpc3Q8UUhvc3RBZGRyZXNzPiBhZGRyZXNzZXM7CisKKyAgICAgICAgUUhvc3RBZGRyZXNz IGFkZHJlc3M7CisgICAgICAgIGlmIChhZGRyZXNzLnNldEFkZHJlc3MoaG9zdCkpIHsKKyAgICAg ICAgICAgIGFkZHJlc3Nlcy5hcHBlbmQoYWRkcmVzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBRSG9zdEluZm8gaW5mbzsKKyAgICAgICAgICAgIGxvb2t1cEhvc3QoaG9zdCk7Cisg ICAgICAgICAgICB3YWl0Rm9ySG9zdEluZm8oaW5mbyk7CisgICAgICAgICAgICBpZiAoaW5mby5l cnJvcigpICE9IFFIb3N0SW5mbzo6Tm9FcnJvcikgeworICAgICAgICAgICAgICAgIGVycm9yKEVS Ul9VTktOT1dOX0hPU1QsIGluZm8uZXJyb3JTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRkcmVzc2VzID0gaW5mby5h ZGRyZXNzZXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIFFMaXN0SXRlcmF0b3I8UUhvc3RBZGRy ZXNzPiBpdChhZGRyZXNzZXMpOworICAgICAgICBpbnQgdGltZW91dCA9IGQtPnRpbWVvdXQgKiAx MDAwOworICAgICAgICBRVGltZSB0aW1lOworICAgICAgICB0aW1lLnN0YXJ0KCk7CisgICAgICAg IGZvcmV2ZXIgeworICAgICAgICAgICAgZC0+c29ja2V0LmNvbm5lY3RUb0hvc3QoaXQubmV4dCgp LCBwb3J0KTsKKyAgICAgICAgICAgIGlmIChkLT5zb2NrZXQud2FpdEZvckNvbm5lY3RlZCh0aW1l b3V0KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgdGltZW91dCA9LSB0aW1lLmVsYXBzZWQoKTsKKyAgICAgICAgICAgIGlmICghaXQuaGFzTmV4 dCgpIHx8ICh0aW1lb3V0IDwgMCkpIHsKICAgICAgICAgICAgICAgICBlcnJvcihFUlJfQ09VTERf Tk9UX0NPTk5FQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgaG9zdCArIFFMYXRpbjFTdHJpbmco IjogIikgKyBkLT5zb2NrZXQuZXJyb3JTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGhv c3QgKyBRTGF0aW4xU3RyaW5nKCI6ICIpICsgZC0+c29ja2V0LmVycm9yU3RyaW5nKCkpOworICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIyMjIGNoZWNrIGZvciBwcm94eUF1 dGhlbnRpY2F0aW9uUmVxdWlyZWRFcnJvcgo= ------=_Part_12692_16382710.1215441027090--