From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v4 04/38] lib: Add a simple prime number generator Date: Thu, 22 Dec 2016 08:36:07 +0000 Message-ID: <20161222083641.2691-5-chris@chris-wilson.co.uk> References: <20161222083641.2691-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161222083641.2691-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org UHJpbWUgbnVtYmVycyBhcmUgaW50ZXJlc3RpbmcgZm9yIHRlc3RpbmcgY29tcG9uZW50cyB0aGF0 IHVzZSBtdWx0aXBsaWVzCmFuZCBkaXZpZGVzLCBzdWNoIGFzIHRlc3RpbmcgRFJNJ3Mgc3RydWN0 IGRybV9tbSBhbGlnbm1lbnQgY29tcHV0YXRpb25zLgoKdjI6IE1vdmUgdG8gbGliLywgYWRkIHNl bGZ0ZXN0CnYzOiBGaXggaW5pdGlhbCBjb25zdGFudHMgKGV4Y2x1ZGUgMC8xIGZyb20gYmVpbmcg cHJpbWVzKQp2NDogTW9yZSBSQ1UgbWFya3VwIHRvIGtlZXAgMGRheS9zcGFyc2UgaGFwcHkKdjU6 IEZpeCBSQ1UgdW53aW5kIG9uIG1vZHVsZSBleGl0LCBhZGQgdG8ga3NlbGZ0ZXN0cwp2NjogVGlk eSBjb21wdXRhdGlvbiBvZiBiaXRtYXAgc2l6ZQp2NzogZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zy b20oKQp2ODogQ29tcG9zZSBzbWFsbC1wcmltZXMgdXNpbmcgQklUKCkgZm9yIGVhc2llciB2ZXJp ZmljYXRpb24Kdjk6IE1vdmUgcmN1IGRhbmNlIGVudGlyZWx5IGludG8gY2FsbGVycy4KClNpZ25l ZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogTHVr YXMgV3VubmVyIDxsdWthc0B3dW5uZXIuZGU+Ci0tLQogaW5jbHVkZS9saW51eC9wcmltZV9udW1i ZXJzLmggICAgICAgICAgICAgICAgfCAgMzcgKysrKwogbGliL0tjb25maWcgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwogbGliL01ha2VmaWxlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDIgKwogbGliL3ByaW1lX251bWJlcnMuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAzMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy90 ZXN0aW5nL3NlbGZ0ZXN0cy9saWIvcHJpbWVfbnVtYmVycy5zaCB8ICAxNSArKwogNSBmaWxlcyBj aGFuZ2VkLCAzNjUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlu dXgvcHJpbWVfbnVtYmVycy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3ByaW1lX251bWJlcnMu YwogY3JlYXRlIG1vZGUgMTAwNzU1IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9wcmltZV9u dW1iZXJzLnNoCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmltZV9udW1iZXJzLmggYi9p bmNsdWRlL2xpbnV4L3ByaW1lX251bWJlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjE0ZWM0ZjU2NzM0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGlu dXgvcHJpbWVfbnVtYmVycy5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX19MSU5VWF9QUklN RV9OVU1CRVJTX0gKKyNkZWZpbmUgX19MSU5VWF9QUklNRV9OVU1CRVJTX0gKKworI2luY2x1ZGUg PGxpbnV4L3R5cGVzLmg+CisKK2Jvb2wgaXNfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCk7 Cit1bnNpZ25lZCBsb25nIG5leHRfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCk7CisKKy8q KgorICogZm9yX2VhY2hfcHJpbWVfbnVtYmVyIC0gaXRlcmF0ZSBvdmVyIGVhY2ggcHJpbWUgdXB0 byBhIHZhbHVlCisgKiBAcHJpbWU6IHRoZSBjdXJyZW50IHByaW1lIG51bWJlciBpbiB0aGlzIGl0 ZXJhdGlvbgorICogQG1heDogdGhlIHVwcGVyIGxpbWl0CisgKgorICogU3RhcnRpbmcgZnJvbSB0 aGUgZmlyc3QgcHJpbWUgbnVtYmVyIDIgaXRlcmF0ZSBvdmVyIGVhY2ggcHJpbWUgbnVtYmVyIHVw IHRvCisgKiB0aGUgQG1heCB2YWx1ZS4gT24gZWFjaCBpdGVyYXRpb24sIEBwcmltZSBpcyBzZXQg dG8gdGhlIGN1cnJlbnQgcHJpbWUgbnVtYmVyLgorICogQG1heCBzaG91bGQgYmUgbGVzcyB0aGFu IFVMT05HX01BWCB0byBlbnN1cmUgdGVybWluYXRpb24uIFRvIGJlZ2luIHdpdGgKKyAqIEBwcmlt ZSBzZXQgdG8gMSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uIHVzZSBmb3JfZWFjaF9wcmltZV9udW1i ZXJfZnJvbSgpCisgKiBpbnN0ZWFkLgorICovCisjZGVmaW5lIGZvcl9lYWNoX3ByaW1lX251bWJl cihwcmltZSwgbWF4KSBcCisJZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20oKHByaW1lKSwgMiwg KG1heCkpCisKKy8qKgorICogZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20gLSBpdGVyYXRlIG92 ZXIgZWFjaCBwcmltZSB1cHRvIGEgdmFsdWUKKyAqIEBwcmltZTogdGhlIGN1cnJlbnQgcHJpbWUg bnVtYmVyIGluIHRoaXMgaXRlcmF0aW9uCisgKiBAZnJvbTogdGhlIGluaXRpYWwgdmFsdWUKKyAq IEBtYXg6IHRoZSB1cHBlciBsaW1pdAorICoKKyAqIFN0YXJ0aW5nIGZyb20gQGZyb20gaXRlcmF0 ZSBvdmVyIGVhY2ggc3VjY2Vzc2l2ZSBwcmltZSBudW1iZXIgdXAgdG8gdGhlCisgKiBAbWF4IHZh bHVlLiBPbiBlYWNoIGl0ZXJhdGlvbiwgQHByaW1lIGlzIHNldCB0byB0aGUgY3VycmVudCBwcmlt ZSBudW1iZXIuCisgKiBAbWF4IHNob3VsZCBiZSBsZXNzIHRoYW4gVUxPTkdfTUFYLCBhbmQgQGZy b20gbGVzcyB0aGFuIEBtYXgsIHRvIGVuc3VyZQorICogdGVybWluYXRpb24uCisgKi8KKyNkZWZp bmUgZm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20ocHJpbWUsIGZyb20sIG1heCkgXAorCWZvciAo cHJpbWUgPSAoZnJvbSk7IHByaW1lIDw9IChtYXgpOyBwcmltZSA9IG5leHRfcHJpbWVfbnVtYmVy KHByaW1lKSkKKworI2VuZGlmIC8qICFfX0xJTlVYX1BSSU1FX05VTUJFUlNfSCAqLwpkaWZmIC0t Z2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAyNjBhODBlMzEzYjkuLjE3ODhh MWY1MGQyOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTU1 MCw0ICs1NTAsMTEgQEAgY29uZmlnIFNUQUNLREVQT1QKIGNvbmZpZyBTQklUTUFQCiAJYm9vbAog Citjb25maWcgUFJJTUVfTlVNQkVSUworCXRyaXN0YXRlICJQcmltZSBudW1iZXIgZ2VuZXJhdG9y IgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFByb3ZpZGVzIGEgaGVscGVyIG1vZHVsZSB0byBnZW5l cmF0ZSBwcmltZSBudW1iZXJzLiBVc2VmdWwgZm9yIHdyaXRpbmcKKwkgIHRlc3QgY29kZSwgZXNw ZWNpYWxseSB3aGVuIGNoZWNraW5nIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc29uLgorCiBlbmRt ZW51CmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggNTAxNDRh M2FlZWJkLi5jNjY0MTQzZmQ5MTcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIv TWFrZWZpbGUKQEAgLTE5Nyw2ICsxOTcsOCBAQCBvYmotJChDT05GSUdfQVNOMSkgKz0gYXNuMV9k ZWNvZGVyLm8KIAogb2JqLSQoQ09ORklHX0ZPTlRfU1VQUE9SVCkgKz0gZm9udHMvCiAKK29iai0k KENPTkZJR19QUklNRV9OVU1CRVJTKSArPSBwcmltZV9udW1iZXJzLm8KKwogaG9zdHByb2dzLXkJ Oj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFibGUuaAogCmRpZmYgLS1n aXQgYS9saWIvcHJpbWVfbnVtYmVycy5jIGIvbGliL3ByaW1lX251bWJlcnMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFlNGRjYmY5OTYxOQotLS0gL2Rldi9udWxs CisrKyBiL2xpYi9wcmltZV9udW1iZXJzLmMKQEAgLTAsMCArMSwzMDQgQEAKKyNkZWZpbmUgcHJf Zm10KGZtdCkgInByaW1lIG51bWJlcnM6ICIgZm10ICJcbiIKKworI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJpbWVf bnVtYmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBiaXRtYXBfc2l6 ZShuYml0cykgKEJJVFNfVE9fTE9OR1MobmJpdHMpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQor CitzdHJ1Y3QgcHJpbWVzIHsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXVuc2lnbmVkIGxvbmcg bGFzdCwgc3o7CisJdW5zaWduZWQgbG9uZyBwcmltZXNbXTsKK307CisKKyNpZiBCSVRTX1BFUl9M T05HID09IDY0CitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW1lcyBzbWFsbF9wcmltZXMgPSB7CisJ Lmxhc3QgPSA2MSwKKwkuc3ogPSA2NCwKKwkucHJpbWVzID0geworCQlCSVQoMikgfAorCQlCSVQo MykgfAorCQlCSVQoNSkgfAorCQlCSVQoNykgfAorCQlCSVQoMTEpIHwKKwkJQklUKDEzKSB8CisJ CUJJVCgxNykgfAorCQlCSVQoMTkpIHwKKwkJQklUKDIzKSB8CisJCUJJVCgyOSkgfAorCQlCSVQo MzEpIHwKKwkJQklUKDM3KSB8CisJCUJJVCg0MSkgfAorCQlCSVQoNDMpIHwKKwkJQklUKDQ3KSB8 CisJCUJJVCg1MykgfAorCQlCSVQoNTkpIHwKKwkJQklUKDYxKQorCX0KK307CisjZWxpZiBCSVRT X1BFUl9MT05HID09IDMyCitzdGF0aWMgY29uc3Qgc3RydWN0IHByaW1lcyBzbWFsbF9wcmltZXMg PSB7CisJLmxhc3QgPSAzMSwKKwkuc3ogPSAzMiwKKwkucHJpbWVzID0geworCQlCSVQoMikgfAor CQlCSVQoMykgfAorCQlCSVQoNSkgfAorCQlCSVQoNykgfAorCQlCSVQoMTEpIHwKKwkJQklUKDEz KSB8CisJCUJJVCgxNykgfAorCQlCSVQoMTkpIHwKKwkJQklUKDIzKSB8CisJCUJJVCgyOSkgfAor CQlCSVQoMzEpCisJfQorfTsKKyNlbHNlCisjZXJyb3IgInVuaGFuZGxlZCBCSVRTX1BFUl9MT05H IgorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CitzdGF0aWMgY29uc3Qgc3Ry dWN0IHByaW1lcyBfX3JjdSAqcHJpbWVzID0gUkNVX0lOSVRJQUxJWkVSKCZzbWFsbF9wcmltZXMp OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWxmdGVzdF9tYXg7CisKK3N0YXRpYyBib29sIHNs b3dfaXNfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBsb25nIHkg PSBpbnRfc3FydCh4KTsKKworCXdoaWxlICh5ID4gMSkgeworCQlpZiAoKHggJSB5KSA9PSAwKQor CQkJYnJlYWs7CisJCXktLTsKKwl9CisKKwlyZXR1cm4geSA9PSAxOworfQorCitzdGF0aWMgdW5z aWduZWQgbG9uZyBzbG93X25leHRfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl3 aGlsZSAoeCA8IFVMT05HX01BWCAmJiAhc2xvd19pc19wcmltZV9udW1iZXIoKyt4KSkKKwkJOwor CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsZWFyX211bHRpcGxlcyh1 bnNpZ25lZCBsb25nIHgsCisJCQkJICAgICB1bnNpZ25lZCBsb25nICpwLAorCQkJCSAgICAgdW5z aWduZWQgbG9uZyBzdGFydCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2ln bmVkIGxvbmcgbTsKKworCW0gPSAyICogeDsKKwlpZiAobSA8IHN0YXJ0KQorCQltID0gcm91bmR1 cChzdGFydCwgeCk7CisKKwl3aGlsZSAobSA8IGVuZCkgeworCQlfX2NsZWFyX2JpdChtLCBwKTsK KwkJbSArPSB4OworCX0KKworCXJldHVybiB4OworfQorCitzdGF0aWMgYm9vbCBleHBhbmRfdG9f bmV4dF9wcmltZSh1bnNpZ25lZCBsb25nIHgpCit7CisJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsK KwlzdHJ1Y3QgcHJpbWVzICpuZXc7CisJdW5zaWduZWQgbG9uZyBzeiwgeTsKKworCS8qIEJldHJh bmQncyBUaGVvcmVtIHN0YXRlczoKKwkgKiAJRm9yIGFsbCBuID4gMSwgdGhlcmUgZXhpc3RzIGEg cHJpbWUgcDogbiA8IHAgPD0gMipuLgorCSAqLworCXN6ID0gMiAqIHggKyAxOworCWlmIChzeiA8 IHgpCisJCXJldHVybiBmYWxzZTsKKworCXN6ID0gcm91bmRfdXAoc3osIEJJVFNfUEVSX0xPTkcp OworCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpICsgYml0bWFwX3NpemUoc3opLCBHRlBfS0VS TkVMKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIGZhbHNlOworCisJbXV0ZXhfbG9jaygmbG9jayk7 CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocHJpbWVzLCBsb2NrZGVwX2lzX2hlbGQo JmxvY2spKTsKKwlpZiAoeCA8IHAtPmxhc3QpIHsKKwkJa2ZyZWUobmV3KTsKKwkJZ290byB1bmxv Y2s7CisJfQorCisJLyogV2hlcmUgbWVtb3J5IHBlcm1pdHMsIHRyYWNrIHRoZSBwcmltZXMgdXNp bmcgdGhlCisJICogU2lldmUgb2YgRXJhdG9zdGhlbmVzLiBUaGUgc2lldmUgaXMgdG8gcmVtb3Zl IGFsbCBtdWx0aXBsZXMgb2Yga25vd24KKwkgKiBwcmltZXMgZnJvbSB0aGUgc2V0LCB3aGF0IHJl bWFpbnMgaW4gdGhlIHNldCBpcyB0aGVyZWZvcmUgcHJpbWUuCisJICovCisJYml0bWFwX2ZpbGwo bmV3LT5wcmltZXMsIHN6KTsKKwliaXRtYXBfY29weShuZXctPnByaW1lcywgcC0+cHJpbWVzLCBw LT5zeik7CisJZm9yICh5ID0gMlVMOyB5IDwgc3o7IHkgPSBmaW5kX25leHRfYml0KG5ldy0+cHJp bWVzLCBzeiwgeSArIDEpKQorCQluZXctPmxhc3QgPSBjbGVhcl9tdWx0aXBsZXMoeSwgbmV3LT5w cmltZXMsIHAtPnN6LCBzeik7CisJbmV3LT5zeiA9IHN6OworCisJQlVHX09OKG5ldy0+bGFzdCA8 PSB4KTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihwcmltZXMsIG5ldyk7CisJaWYgKHAgIT0gJnNt YWxsX3ByaW1lcykKKwkJa2ZyZWVfcmN1KChzdHJ1Y3QgcHJpbWVzICopcCwgcmN1KTsKKwordW5s b2NrOgorCW11dGV4X3VubG9jaygmbG9jayk7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICog bmV4dF9wcmltZV9udW1iZXIgLSByZXR1cm4gdGhlIG5leHQgcHJpbWUgbnVtYmVyCisgKiBAeDog dGhlIHN0YXJ0aW5nIHBvaW50IGZvciBzZWFyY2hpbmcgdG8gdGVzdAorICoKKyAqIEEgcHJpbWUg bnVtYmVyIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDEgdGhhdCBpcyBvbmx5IGRpdmlzaWJs ZSBieQorICogaXRzZWxmIGFuZCAxLiAgVGhlIHNldCBvZiBwcmltZSBudW1iZXJzIGlzIGNvbXB1 dGVkIHVzaW5nIHRoZSBTaWV2ZSBvZgorICogRXJhdG9zaGVuZXMgKG9uIGZpbmRpbmcgYSBwcmlt ZSwgYWxsIG11bHRpcGxlcyBvZiB0aGF0IHByaW1lIGFyZSByZW1vdmVkCisgKiBmcm9tIHRoZSBz ZXQpIGVuYWJsaW5nIGEgZmFzdCBsb29rdXAgb2YgdGhlIG5leHQgcHJpbWUgbnVtYmVyIGxhcmdl ciB0aGFuCisgKiBAeC4gSWYgdGhlIHNpZXZlIGZhaWxzIChtZW1vcnkgbGltaXRhdGlvbiksIHRo ZSBzZWFyY2ggZmFsbHMgYmFjayB0byB1c2luZworICogc2xvdyB0cmlhbC1kaXZpc29uLCB1cCB0 byB0aGUgdmFsdWUgb2YgVUxPTkdfTUFYICh3aGljaCBpcyByZXBvcnRlZCBhcyB0aGUKKyAqIGZp bmFsIHByaW1lIGFzIGEgc2VudGluZWwpLgorICoKKyAqIFJldHVybnM6IHRoZSBuZXh0IHByaW1l IG51bWJlciBsYXJnZXIgdGhhbiBAeAorICovCit1bnNpZ25lZCBsb25nIG5leHRfcHJpbWVfbnVt YmVyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwljb25zdCBzdHJ1Y3QgcHJpbWVzICpwOworCisJcmN1 X3JlYWRfbG9jaygpOworCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl3aGlsZSAoeCA+ PSBwLT5sYXN0KSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWlmICghZXhwYW5kX3RvX25l eHRfcHJpbWUoeCkpCisJCQlyZXR1cm4gc2xvd19uZXh0X3ByaW1lX251bWJlcih4KTsKKworCQly Y3VfcmVhZF9sb2NrKCk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl9CisJeCA9 IGZpbmRfbmV4dF9iaXQocC0+cHJpbWVzLCBwLT5sYXN0LCB4ICsgMSk7CisJcmN1X3JlYWRfdW5s b2NrKCk7CisKKwlyZXR1cm4geDsKK30KK0VYUE9SVF9TWU1CT0wobmV4dF9wcmltZV9udW1iZXIp OworCisvKioKKyAqIGlzX3ByaW1lX251bWJlciAtIHRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gbnVt YmVyIGlzIHByaW1lCisgKiBAeDogdGhlIG51bWJlciB0byB0ZXN0CisgKgorICogQSBwcmltZSBu dW1iZXIgaXMgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMSB0aGF0IGlzIG9ubHkgZGl2aXNpYmxl IGJ5CisgKiBpdHNlbGYgYW5kIDEuIEludGVybmFsbHkgYSBjYWNoZSBvZiBwcmltZSBudW1iZXJz IGlzIGtlcHQgKHRvIHNwZWVkIHVwCisgKiBzZWFyY2hpbmcgZm9yIHNlcXVlbnRpYWwgcHJpbWVz LCBzZWUgbmV4dF9wcmltZV9udW1iZXIoKSksIGJ1dCBpZiB0aGUgbnVtYmVyCisgKiBmYWxscyBv dXRzaWRlIG9mIHRoYXQgY2FjaGUsIGl0cyBwcmltYWxpdHkgaXMgdGVzdGVkIHVzaW5nIHRyaWFs LWRpdmlzb24uCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBAeCBpcyBwcmltZSwgZmFsc2UgZm9y IGNvbXBvc2l0ZSBudW1iZXJzLgorICovCitib29sIGlzX3ByaW1lX251bWJlcih1bnNpZ25lZCBs b25nIHgpCit7CisJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKKwlib29sIHJlc3VsdDsKKworCXJj dV9yZWFkX2xvY2soKTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlKHByaW1lcyk7CisJd2hpbGUgKHgg Pj0gcC0+c3opIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJaWYgKCFleHBhbmRfdG9fbmV4 dF9wcmltZSh4KSkKKwkJCXJldHVybiBzbG93X2lzX3ByaW1lX251bWJlcih4KTsKKworCQlyY3Vf cmVhZF9sb2NrKCk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKKwl9CisJcmVzdWx0 ID0gdGVzdF9iaXQoeCwgcC0+cHJpbWVzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVy biByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKGlzX3ByaW1lX251bWJlcik7CisKK3N0YXRpYyB2 b2lkIGR1bXBfcHJpbWVzKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKKwljaGFy ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwlyY3Vf cmVhZF9sb2NrKCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZShwcmltZXMpOworCisJaWYgKGJ1ZikK KwkJYml0bWFwX3ByaW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCBwLT5wcmltZXMsIHAtPnN6KTsK Kwlwcl9pbmZvKCJwcmltZXMue2xhc3Q9JWx1LCAuc3o9JWx1LCAucHJpbWVzW109Li4ueCVseH0g PSAlcyIsCisJCXAtPmxhc3QsIHAtPnN6LCBwLT5wcmltZXNbQklUU19UT19MT05HUyhwLT5zeikg LSAxXSwgYnVmKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJa2ZyZWUoYnVmKTsKK30KKwor c3RhdGljIGludCBzZWxmdGVzdCh1bnNpZ25lZCBsb25nIG1heCkKK3sKKwl1bnNpZ25lZCBsb25n IHgsIGxhc3Q7CisKKwlpZiAoIW1heCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGxhc3QgPSAwLCB4 ID0gMjsgeCA8IG1heDsgeCsrKSB7CisJCWJvb2wgc2xvdyA9IHNsb3dfaXNfcHJpbWVfbnVtYmVy KHgpOworCQlib29sIGZhc3QgPSBpc19wcmltZV9udW1iZXIoeCk7CisKKwkJaWYgKHNsb3cgIT0g ZmFzdCkgeworCQkJcHJfZXJyKCJpbmNvbnNpc3RlbnQgcmVzdWx0IGZvciBpcy1wcmltZSglbHUp OiBzbG93PSVzLCBmYXN0PSVzISIsCisJCQkgICAgICAgeCwgc2xvdyA/ICJ5ZXMiIDogIm5vIiwg ZmFzdCA/ICJ5ZXMiIDogIm5vIik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmICghc2xvdykK KwkJCWNvbnRpbnVlOworCisJCWlmIChuZXh0X3ByaW1lX251bWJlcihsYXN0KSAhPSB4KSB7CisJ CQlwcl9lcnIoImluY29ycmVjdCByZXN1bHQgZm9yIG5leHQtcHJpbWUoJWx1KTogZXhwZWN0ZWQg JWx1LCBnb3QgJWx1IiwKKwkJCSAgICAgICBsYXN0LCB4LCBuZXh0X3ByaW1lX251bWJlcihsYXN0 KSk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlsYXN0ID0geDsKKwl9CisKKwlwcl9pbmZvKCJzZWxm dGVzdCglbHUpIHBhc3NlZCwgbGFzdCBwcmltZSB3YXMgJWx1IiwgeCwgbGFzdCk7CisJcmV0dXJu IDA7CisKK2VycjoKKwlkdW1wX3ByaW1lcygpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0 aWMgaW50IF9faW5pdCBwcmltZXNfaW5pdCh2b2lkKQoreworCXJldHVybiBzZWxmdGVzdChzZWxm dGVzdF9tYXgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJpbWVzX2V4aXQodm9pZCkKK3sK Kwljb25zdCBzdHJ1Y3QgcHJpbWVzICpwOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJcCA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocHJpbWVzLCBsb2NrZGVwX2lzX2hlbGQoJmxvY2spKTsK KwlpZiAocCAhPSAmc21hbGxfcHJpbWVzKSB7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwcmltZXMs ICZzbWFsbF9wcmltZXMpOworCQlrZnJlZV9yY3UoKHN0cnVjdCBwcmltZXMgKilwLCByY3UpOwor CX0KKwltdXRleF91bmxvY2soJmxvY2spOworfQorCittb2R1bGVfaW5pdChwcmltZXNfaW5pdCk7 Cittb2R1bGVfZXhpdChwcmltZXNfZXhpdCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChzZWxmdGVz dCwgc2VsZnRlc3RfbWF4LCB1bG9uZywgMDQwMCk7CisKK01PRFVMRV9BVVRIT1IoIkludGVsIENv cnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS90b29scy90 ZXN0aW5nL3NlbGZ0ZXN0cy9saWIvcHJpbWVfbnVtYmVycy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL2xpYi9wcmltZV9udW1iZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAwMDAwMC4uZGE0Y2JjZDc2NmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGlu Zy9zZWxmdGVzdHMvbGliL3ByaW1lX251bWJlcnMuc2gKQEAgLTAsMCArMSwxNSBAQAorIyEvYmlu L3NoCisjIENoZWNrcyBmYXN0L3Nsb3cgcHJpbWVfbnVtYmVyIGdlbmVyYXRpb24gZm9yIGluY29u c2lzdGVuY2llcworCitpZiAhIC9zYmluL21vZHByb2JlIC1xIC1yIHByaW1lX251bWJlcnM7IHRo ZW4KKwllY2hvICJwcmltZV9udW1iZXJzOiBbU0tJUF0iCisJZXhpdCA3NworZmkKKworaWYgL3Ni aW4vbW9kcHJvYmUgLXEgcHJpbWVfbnVtYmVycyBzZWxmdGVzdD02NTUzNjsgdGhlbgorCS9zYmlu L21vZHByb2JlIC1xIC1yIHByaW1lX251bWJlcnMKKwllY2hvICJwcmltZV9udW1iZXJzOiBvayIK K2Vsc2UKKwllY2hvICJwcmltZV9udW1iZXJzOiBbRkFJTF0iCisJZXhpdCAxCitmaQotLSAKMi4x MS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK