[ruby-dev:48191] [ruby-trunk - Feature #9816] 文字列内の数字を数値として比較するメソッド
From:
naruse@...
Date:
2014-05-08 10:58:58 UTC
List:
ruby-dev #48191
SXNzdWUgIzk4MTYgaGFzIGJlZW4gdXBkYXRlZCBieSBZdWkgTkFSVVNFLgoK CkthenVoaXJvIE5JU0hJWUFNQSB3cm90ZToKPiBudW1lcmljY21wIOOBoOOB qOikh+aVsOOBruaVsOWApOOBjOWFpeOBo+OBpuOBhOOCi+aWh+Wtl+WIl+OC kuavlOi8g+OBmeOCi+OCguOBruOBqOOBhOOBhuOBruOBjOOCj+OBi+OCiuOB q+OBj+OBhOOBqOaAneOBhOOBvuOBl+OBn+OAggo+IAo+IOacgOWIneOBq+aA neOBhOOBpOOBhOOBn+OBruOBryB2ZXJzaW9uY21wIOOBqOOBhOOBhuWQjeWJ jeOBp+OBl+OBn+OBjOOAgQo+IHB1cHBldCDjgarjganjgafkvb/jgo/jgozj gabjgYTjgovjgojjgYbjgafjgZnjgIIKPiBodHRwczovL2dpdGh1Yi5jb20v cHVwcGV0bGFicy9wdXBwZXQvYmxvYi9tYXN0ZXIvbGliL3B1cHBldC91dGls L3BhY2thZ2UucmIKCuWQjeWJjeOBruWAmeijnOOBqOOBl+OBpuOBr+OBhOOB hOOCk+OBmOOCg+OBquOBhOOBp+OBmeOBi+OBreOAggpTdHJpbmcg44Gr55Sf 44KE44GX44Gm44GE44KL44KP44GR44Gn44Gv44Gq44GE44Gu44Gn44CBcHVw cGV044GM5L2/44Gj44Gm44GE44KL44Gu44Gv54Sh6KaW44GX44Gm44GE44GE 44Go5oCd44GE44G+44GZ44CCCgo+IGNvcmV1dGlscyDjgaDjgaggZmlsZXZl cmNtcCDjgajjgYTjgYblkI3liY3jga7jgojjgYbjgafjgZnjgIIKPiBodHRw czovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy9tYW51YWwvaHRt bF9ub2RlL0RldGFpbHMtYWJvdXQtdmVyc2lvbi1zb3J0Lmh0bWwKPiAKPiBy cG0g44Gg44GoIHJwbXZlcmNtcCDjgajjgYTjgYblkI3liY3jga7jgojjgYbj gafjgZnjgIIKPiBodHRwOi8vcnBtLm9yZy9hcGkvNC40LjIuMi9ycG1saWJf OGguaHRtbAoKcnBtdmVyY21w44Gv6KuW5aSW44Go44GX44Gm44CBZmlsZXZl cmNtcOOBr+aMmeWLleOBjOOBoOOBhOOBtumBleOBhOOBvuOBmeOBreOAggpo dHRwczovL2dpdGh1Yi5jb20vZ2FnZXJuL2dudWxpYi9ibG9iL21hc3Rlci9s aWIvZmlsZXZlcmNtcC5jCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpGZWF0dXJlICM5ODE2OiDmloflrZfliJflhoXjga7m lbDlrZfjgpLmlbDlgKTjgajjgZfjgabmr5TovIPjgZnjgovjg6Hjgr3jg4Pj g4kKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzk4MTYjY2hh bmdlLTQ2NjE4CgoqIEF1dGhvcjogWXVpIE5BUlVTRQoqIFN0YXR1czogQXNz aWduZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6IFl1a2loaXJv IE1hdHN1bW90bwoqIENhdGVnb3J5OiBjb3JlCiogVGFyZ2V0IHZlcnNpb246 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCuaW h+Wtl+WIl+WGheOBruaVsOWtl+OCkuaVsOWApOOBqOOBl+OBpuavlOi8g+OB meOCi+ODoeOCveODg+ODieOCkui/veWKoOOBl+OBvuOBm+OCk+OBiwoK44Gd 44Gu44KI44GG44Gq5q+U6LyD44Gv5LiA6Iis55qE44Gq55So6YCU44Go44GX 44Gm44GvR1VJ44K344Kn44Or44Gu44OV44Kh44Kk44Op44O844GM5q+U6LyD 44Gr55So44GE44Gm44GK44KK44CBCldpbmRvd3Mg44Gn44GvIFN0ckNtcExv Z2ljYWxXIOOBjOOAgU9TIFgg44Gn44GvIE5TU3RyaW5nOmNvbXBhcmU6b3B0 aW9uczrjgbjjga5OU051bWVyaWNTZWFyY2jlrprmlbDjgYzmj5DkvpvjgZXj gozjgabjgYTjgb7jgZnjgIIKaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9l bi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjc1OTk0Nyh2PXZzLjg1 KS5hc3B4Cmh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L21h Yy9kb2N1bWVudGF0aW9uL0NvY29hL1JlZmVyZW5jZS9Gb3VuZGF0aW9uL0Ns YXNzZXMvTlNTdHJpbmdfQ2xhc3MvUmVmZXJlbmNlL05TU3RyaW5nLmh0bWwj Ly9hcHBsZV9yZWYvYy9lY29uc3QvTlNOdW1lcmljU2VhcmNoCgrkuIroqJjj ga7jgojjgYbjgarlh6bnkIboh6rkvZPjga/jgZXjgbvjganpm6PjgZfjgYTj goLjga7jgafjga/jgYLjgorjgb7jgZvjgpPjgYzjgIFSdWJ544Os44OZ44Or 44Gn5a6f6KOF44GZ44KL44Go5aSn6YeP44Gu44Kq44OW44K444Kn44Kv44OI 44KS5L2c44Gj44Gm44GX44G+44GE44G+44GZ44CCCuS+i+OBiOOBsCBgR2Vt OjpWZXJzaW9uLm5ldygiMi4xLjEwIi5mcmVlemUpPD0+R2VtOjpWZXJzaW9u Lm5ldygiMi4xLjkiLmZyZWV6ZSlgIOOBrzQ35YCL44CBCmAiMi4xLjEwIi5m cmVlemUuc3BsaXQoJy4nKS5tYXAoJjp0b19pKTw9PiIyLjEuOSIuZnJlZXpl LnNwbGl0KCcuJykubWFwKCY6dG9faSlgIOOBoOOBqDE25YCL44Gu44Kq44OW 44K444Kn44Kv44OI44KS5L2c44KK44G+44GZ44CCCmAiMi4xLjEwIi5mcmVl emUubnVtZXJpY2NtcCIyLjEuOSIuZnJlZXplYCDjgarjgonjgbDjgIHjgoLj gaHjgo3jgpPjgqrjg5bjgrjjgqfjgq/jg4jjga/kuIDjgaTjgoLkvZzjgorj gb7jgZvjgpPjgIIKCuOBquOBiuOAgeS4iuiomOOBruS+i+OBp+OCguekuuWU huOBl+OBpuOBhOOBvuOBmeOBjOOAgeacrOODoeOCveODg+ODieOBryBSdWJ5 IOOBruODkOODvOOCuOODp+ODs+ihqOiomOOBriBURUVOWSDjgYwy5qGB44Gr 44Gq44Gj44Gf5aC05ZCI44Gu5q+U6LyD44Gr55So44GE44KL44GT44Go44GM 44Gn44GN44G+44GZ44CCCgrjg5Hjg4Pjg4Hjga/ku6XkuIvjga7pgJrjgorj gafjgZnjgIIK44Gq44GK44CB44Oh44K944OD44OJ5ZCN44GvIFN0cmluZyNu dW1lcmljY21wIOOBqOOBl+OBpuOBhOOBvuOBmeOAggrvvIhTdHJpbmcjY2Fz ZWNtcOOCkuW/temgreOBq+e9ruOBhOOBn++8iQoKYGBgCmRpZmYgLS1naXQg YS9zdHJpbmcuYyBiL3N0cmluZy5jCmluZGV4IGM1ODljODAuLjY2ZjY2N2Yg MTAwNjQ0Ci0tLSBhL3N0cmluZy5jCisrKyBiL3N0cmluZy5jCkBAIC0yNTY5 LDYgKzI1NjksMTMxIEBAIHJiX3N0cl9jYXNlY21wKFZBTFVFIHN0cjEsIFZB TFVFIHN0cjIpCiAgICAgcmV0dXJuIElOVDJGSVgoLTEpOwogfQogCitWQUxV RQorbnVtZXJpY2FsX2NvbXBhcmUoY29uc3QgY2hhciAqKnBwMSwgY29uc3Qg Y2hhciAqcDFlbmQsIGNvbnN0IGNoYXIgKipwcDIsIGNvbnN0IGNoYXIgKnAy ZW5kKQoreworICAgIGNvbnN0IGNoYXIgKnMxID0gKnBwMSwgKnAxLCAqczIg PSAqcHAyLCAqcDI7CisgICAgcHRyZGlmZl90IGxlbjEsIGxlbjI7CisgICAg aW50IHI7CisKKyAgICB3aGlsZSAoczEgPCBwMWVuZCAmJiAqczEgPT0gJzAn KSBzMSsrOworICAgIHAxID0gczE7CisgICAgd2hpbGUgKHAxIDwgcDFlbmQg JiYgSVNESUdJVCgqcDEpKSBwMSsrOworICAgIGxlbjEgPSBwMSAtIHMxOwor CisgICAgd2hpbGUgKHMyIDwgcDJlbmQgJiYgKnMyID09ICcwJykgczIrKzsK KyAgICBwMiA9IHMyOworICAgIHdoaWxlIChwMiA8IHAyZW5kICYmIElTRElH SVQoKnAyKSkgcDIrKzsKKyAgICBsZW4yID0gcDIgLSBzMjsKKworICAgIGlm IChsZW4xICE9IGxlbjIpIHsKKwlyZXR1cm4gSU5UMkZJWChsZW4xIDwgbGVu MiA/IC0xIDogMSk7CisgICAgfQorCisgICAgciA9IG1lbWNtcChzMSwgczIs IGxlbjEpOworICAgIGlmIChyKSByZXR1cm4gciA8IDAgPyBJTlQyRklYKC0x KSA6IElOVDJGSVgoMSk7CisKKyAgICBsZW4xID0gczEgLSAqcHAxOworICAg IGxlbjIgPSBzMiAtICpwcDI7CisgICAgaWYgKGxlbjEgIT0gbGVuMikgewor CXJldHVybiBJTlQyRklYKGxlbjEgPCBsZW4yID8gLTEgOiAxKTsKKyAgICB9 CisKKyAgICAqcHAxID0gcDE7CisgICAgKnBwMiA9IHAyOworICAgIHJldHVy biBRbmlsOworfQorCisvKgorICogIGNhbGwtc2VxOgorICogICAgIHN0ci5u dW1lcmljY21wKG90aGVyX3N0cikgICAtPiAtMSwgMCwgKzEgb3IgbmlsCisg KgorICogIFZhcmlhbnQgb2YgPGNvZGU+U3RyaW5nIzw9PjwvY29kZT4sIHdo aWNoIGNvbnNpZGVycyBkaWdpdHMgaW4gc3RyaW5ncworICogIGFyZSBudW1l cmljIHZhbHVlLi4KKyAqCisgKiAgICAgImExIi5udW1lcmljY21wKCJhMSIp ICAgICAgICAgICAgIz0+IDAKKyAqICAgICAiYWEiLm51bWVyaWNjbXAoImEx IikgICAgICAgICAgICAjPT4gMQorICogICAgICJhMSIubnVtZXJpY2NtcCgi YWEiKSAgICAgICAgICAgICM9PiAtMQorICogICAgICJhMSIubnVtZXJpY2Nt cCgiYTAxIikgICAgICAgICAgICM9PiAtMQorICogICAgICIyLjEuMiIubnVt ZXJpY2NtcCgiMi4xLjEwIikgICAgICM9PiAxCisgKi8KKworc3RhdGljIFZB TFVFCityYl9zdHJfbnVtZXJpY2NtcChWQUxVRSBzdHIxLCBWQUxVRSBzdHIy KQoreworICAgIGxvbmcgbGVuOworICAgIHJiX2VuY29kaW5nICplbmM7Cisg ICAgY29uc3QgY2hhciAqcDEsICpwMWVuZCwgKnAyLCAqcDJlbmQ7CisKKyAg ICBTdHJpbmdWYWx1ZShzdHIyKTsKKyAgICBlbmMgPSByYl9lbmNfY29tcGF0 aWJsZShzdHIxLCBzdHIyKTsKKyAgICBpZiAoIWVuYykgeworCXJldHVybiBR bmlsOworICAgIH0KKworICAgIHAxID0gUlNUUklOR19QVFIoc3RyMSk7IHAx ZW5kID0gUlNUUklOR19FTkQoc3RyMSk7CisgICAgcDIgPSBSU1RSSU5HX1BU UihzdHIyKTsgcDJlbmQgPSBSU1RSSU5HX0VORChzdHIyKTsKKyAgICBpZiAo c2luZ2xlX2J5dGVfb3B0aW1pemFibGUoc3RyMSkgJiYgc2luZ2xlX2J5dGVf b3B0aW1pemFibGUoc3RyMikpIHsKKwl3aGlsZSAocDEgPCBwMWVuZCAmJiBw MiA8IHAyZW5kKSB7CisJICAgIGlmIChJU0RJR0lUKCpwMSkpIHsKKwkJaWYg KElTRElHSVQoKnAyKSkgeworCQkgICAgVkFMVUUgciA9IG51bWVyaWNhbF9j b21wYXJlKCZwMSwgcDFlbmQsICZwMiwgcDJlbmQpOworCQkgICAgaWYgKCFO SUxfUChyKSkgcmV0dXJuIHI7CisJCX0KKwkJZWxzZSB7CisJCSAgICByZXR1 cm4gSU5UMkZJWCgtMSk7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChJ U0RJR0lUKCpwMikpIHsKKwkJcmV0dXJuIElOVDJGSVgoMSk7CisJICAgIH0K KwkgICAgaWYgKCpwMSAhPSAqcDIpIHJldHVybiBJTlQyRklYKCpwMSA8ICpw MiA/IC0xIDogMSk7CisJICAgIHAxKys7CisJICAgIHAyKys7CisJfQorICAg IH0KKyAgICBlbHNlIHsKKwl3aGlsZSAocDEgPCBwMWVuZCAmJiBwMiA8IHAy ZW5kKSB7CisgICAgICAgICAgICBpbnQgbDEsIGMxID0gcmJfZW5jX2FzY2dl dChwMSwgcDFlbmQsICZsMSwgZW5jKTsKKyAgICAgICAgICAgIGludCBsMiwg YzIgPSByYl9lbmNfYXNjZ2V0KHAyLCBwMmVuZCwgJmwyLCBlbmMpOworCisg ICAgICAgICAgICBpZiAoMCA8PSBjMSAmJiAwIDw9IGMyKSB7CisJCWlmIChJ U0RJR0lUKCpwMSkpIHsKKwkJICAgIGlmIChJU0RJR0lUKCpwMikpIHsKKwkJ CVZBTFVFIHIgPSBudW1lcmljYWxfY29tcGFyZSgmcDEsIHAxZW5kLCAmcDIs IHAyZW5kKTsKKwkJCWlmICghTklMX1AocikpIHJldHVybiByOworCQkgICAg fQorCQkgICAgZWxzZSB7CisJCQlyZXR1cm4gSU5UMkZJWCgtMSk7CisJCSAg ICB9CisJCX0KKwkJZWxzZSBpZiAoSVNESUdJVCgqcDIpKSB7CisJCSAgICBy ZXR1cm4gSU5UMkZJWCgxKTsKKwkJfQorCQlpZiAoKnAxICE9ICpwMikgcmV0 dXJuIElOVDJGSVgoKnAxIDwgKnAyID8gLTEgOiAxKTsKKwkJcDErKzsKKwkJ cDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgICAgIGludCByOworICAgICAgICAgICAgICAgIGwxID0gcmJf ZW5jX21iY2xlbihwMSwgcDFlbmQsIGVuYyk7CisgICAgICAgICAgICAgICAg bDIgPSByYl9lbmNfbWJjbGVuKHAyLCBwMmVuZCwgZW5jKTsKKyAgICAgICAg ICAgICAgICBsZW4gPSBsMSA8IGwyID8gbDEgOiBsMjsKKyAgICAgICAgICAg ICAgICByID0gbWVtY21wKHAxLCBwMiwgbGVuKTsKKyAgICAgICAgICAgICAg ICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5U MkZJWChyIDwgMCA/IC0xIDogMSk7CisgICAgICAgICAgICAgICAgaWYgKGwx ICE9IGwyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5UMkZJWChs MSA8IGwyID8gLTEgOiAxKTsKKyAgICAgICAgICAgIH0KKwkgICAgcDEgKz0g bDE7CisJICAgIHAyICs9IGwyOworCX0KKyAgICB9CisgICAgaWYgKFJTVFJJ TkdfTEVOKHN0cjEpID09IFJTVFJJTkdfTEVOKHN0cjIpKSByZXR1cm4gSU5U MkZJWCgwKTsKKyAgICBpZiAoUlNUUklOR19MRU4oc3RyMSkgPiBSU1RSSU5H X0xFTihzdHIyKSkgcmV0dXJuIElOVDJGSVgoMSk7CisgICAgcmV0dXJuIElO VDJGSVgoLTEpOworfQorCiBzdGF0aWMgbG9uZwogcmJfc3RyX2luZGV4KFZB TFVFIHN0ciwgVkFMVUUgc3ViLCBsb25nIG9mZnNldCkKIHsKQEAgLTg3MjEs NiArODg0Niw3IEBAIEluaXRfU3RyaW5nKHZvaWQpCiAgICAgcmJfZGVmaW5l X21ldGhvZChyYl9jU3RyaW5nLCAiZXFsPyIsIHJiX3N0cl9lcWwsIDEpOwog ICAgIHJiX2RlZmluZV9tZXRob2QocmJfY1N0cmluZywgImhhc2giLCByYl9z dHJfaGFzaF9tLCAwKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJp bmcsICJjYXNlY21wIiwgcmJfc3RyX2Nhc2VjbXAsIDEpOworICAgIHJiX2Rl ZmluZV9tZXRob2QocmJfY1N0cmluZywgIm51bWVyaWNjbXAiLCByYl9zdHJf bnVtZXJpY2NtcCwgMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jU3Ry aW5nLCAiKyIsIHJiX3N0cl9wbHVzLCAxKTsKICAgICByYl9kZWZpbmVfbWV0 aG9kKHJiX2NTdHJpbmcsICIqIiwgcmJfc3RyX3RpbWVzLCAxKTsKICAgICBy Yl9kZWZpbmVfbWV0aG9kKHJiX2NTdHJpbmcsICIlIiwgcmJfc3RyX2Zvcm1h dF9tLCAxKTsKZGlmZiAtLWdpdCBhL3Rlc3QvcnVieS90ZXN0X3N0cmluZy5y YiBiL3Rlc3QvcnVieS90ZXN0X3N0cmluZy5yYgppbmRleCA4MzY2NDI0Li5m OWM3ODhiIDEwMDY0NAotLS0gYS90ZXN0L3J1YnkvdGVzdF9zdHJpbmcucmIK KysrIGIvdGVzdC9ydWJ5L3Rlc3Rfc3RyaW5nLnJiCkBAIC0yMTA0LDYgKzIx MDQsMjkgQEAgY2xhc3MgVGVzdFN0cmluZyA8IFRlc3Q6OlVuaXQ6OlRlc3RD YXNlCiAgICAgYXNzZXJ0X2VxdWFsKDEsICJcdTMwNDJCIi5jYXNlY21wKCJc dTMwNDJhIikpCiAgIGVuZAogCisgIGRlZiB0ZXN0X251bWVyaWNjbXAKKyAg ICBhc3NlcnRfZXF1YWwoLTEsICIyLjEuMCIubnVtZXJpY2NtcCgiMi4xLjEi KSkKKyAgICBhc3NlcnRfZXF1YWwoLTEsICIyLjEuOSIubnVtZXJpY2NtcCgi Mi4xLjEwIikpCisgICAgYXNzZXJ0X2VxdWFsKCAwLCAiYTEiLm51bWVyaWNj bXAoImExIikpCisgICAgYXNzZXJ0X2VxdWFsKCAxLCAiYWEiLm51bWVyaWNj bXAoImExIikpCisgICAgYXNzZXJ0X2VxdWFsKC0xLCAiYTEiLm51bWVyaWNj bXAoImFhIikpCisgICAgYXNzZXJ0X2VxdWFsKC0xLCAiYTEiLm51bWVyaWNj bXAoImEwMSIpKQorICAgIGFzc2VydF9lcXVhbCgtMSwgImEwMDAxIi5udW1l cmljY21wKCJhMDAwMDEiKSkKKyAgICBhc3NlcnRfZXF1YWwoIDAsICJhMWEi Lm51bWVyaWNjbXAoImExYSIpKQorICAgIGFzc2VydF9lcXVhbCggMSwgImEx YiIubnVtZXJpY2NtcCgiYTFhIikpCisgICAgYXNzZXJ0X2VxdWFsKC0xLCAi YTlhIi5udW1lcmljY21wKCJhMTBhIikpCisgICAgYXNzZXJ0X2VxdWFsKCAx LCAiYiIubnVtZXJpY2NtcCgiYSIpKQorICAgIGFzc2VydF9lcXVhbCggMCwg Ilx1MzA0MjEiLm51bWVyaWNjbXAoIlx1MzA0MjEiKSkKKyAgICBhc3NlcnRf ZXF1YWwoIDEsICJcdTMwNDJcdTMwNDIiLm51bWVyaWNjbXAoIlx1MzA0MjEi KSkKKyAgICBhc3NlcnRfZXF1YWwoLTEsICJcdTMwNDIxIi5udW1lcmljY21w KCJcdTMwNDJcdTMwNDIiKSkKKyAgICBhc3NlcnRfZXF1YWwoLTEsICJcdTMw NDIxIi5udW1lcmljY21wKCJcdTMwNDIwMSIpKQorICAgIGFzc2VydF9lcXVh bCgtMSwgIlx1MzA0MjAwMDEiLm51bWVyaWNjbXAoIlx1MzA0MjAwMDAxIikp CisgICAgYXNzZXJ0X2VxdWFsKCAwLCAiXHUzMDQyMVx1MzA0MiIubnVtZXJp Y2NtcCgiXHUzMDQyMVx1MzA0MiIpKQorICAgIGFzc2VydF9lcXVhbCggMSwg Ilx1MzA0MjFcdTMwNDQiLm51bWVyaWNjbXAoIlx1MzA0MjFcdTMwNDIiKSkK KyAgICBhc3NlcnRfZXF1YWwoLTEsICJcdTMwNDI5XHUzMDQyIi5udW1lcmlj Y21wKCJcdTMwNDIxMFx1MzA0MiIpKQorICAgIGFzc2VydF9lcXVhbCggMSwg Ilx1MzA0NCIubnVtZXJpY2NtcCgiXHUzMDQyIikpCisgIGVuZAorCiAgIGRl ZiB0ZXN0X3VwY2FzZTIKICAgICBhc3NlcnRfZXF1YWwoIlx1MzA0MkFCIiwg Ilx1MzA0MmFCIi51cGNhc2UpCiAgIGVuZApgYGAKCgoKLS0gCmh0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnLwo=