[#110736] Can't sign in to bugs.ruby-lang.org — Daniel Berger <djberg96@...>
Hi,
4 messages
2022/11/13
[ruby-core:110644] [Ruby master Feature#19104] Introduce the cache-based optimization for Regexp matching
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2022-11-07 18:26:23 UTC
List:
ruby-core #110644
SXNzdWUgIzE5MTA0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4N Cg0KDQpGcm9tIGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTA3NCNub3RlLTYg ZnJvbSBAbWFtZToNCj4gLi4uICgyKSBzaG91bGQgd2UgcHJvdmlkZSBhIHdheSB0byB0ZWxsIHVz ZXJzIGlmIGEgZ2l2ZW4gcmVnZXhwIGlzIG9wdGltaXphYmxlIG9yIG5vdCAoZS5nLiwgYSB3YXJu aW5nIGF0IHVub3B0aW1pemFibGUgcmVnZXhwIGNyZWF0aW9uLCBhIG5ldyBBUEkgbGlrZSBgUmVn ZXhwI29wdGltaXphYmxlP2AsIG9yIGEgbmV3IG9wdC1pbiBSZWdleHAgZmxhZyBgL2Zvby9yYCB0 byByYWlzZSBhIFN5bnRheEVycm9yIHdoZW4gaXQgaXMgbm90IG9wdGltaXphYmxlLCBldGMuKQ0K DQpJIHRoaW5rIGEgY29tbWFuZC1saW5lIGZsYWcgb3IgYSBuZXcgd2FybmluZyBjYXRlZ29yeSBp cyBiZXN0IGZvciB0aGlzLg0KRm9yIGluc3RhbmNlIEkgZW52aXNpb25lZCBgLS13YXJuLXNsb3ct cmVnZXhwc2AgaW4gaHR0cHM6Ly9lcmVnb24ubWUvYmxvZy9hc3NldHMvcmVzZWFyY2gvanVzdC1p bi10aW1lLWNvbXBpbGluZy1ydWJ5LXJlZ2V4cHMtb24tdHJ1ZmZsZXJ1YnkucGRmIHNsaWRlIDE4 Lg0KQSB3YXJuaW5nIGNhdGVnb3J5IGlzIG5pY2UgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZCB0byBl LmcuIHJhaXNlIGEgZXhjZXB0aW9uIG9uIHN1Y2ggc2xvdyBSZWdleHBzIGFuZCBzbyBlbnN1cmUg YW4gYXBwbGljYXRpb24gZG9lc24ndCB1c2UgYW55IHN1Y2ggUmVnZXhwLg0KDQoiYSBuZXcgQVBJ IGxpa2UgYFJlZ2V4cCNvcHRpbWl6YWJsZT9gIiBzZWVtcyB1c2VsZXNzIHRvIG1lLCB0aGUgdmFs dWUgb2YgdGhpcyBpcyBjaGVja2luZyBhbGwgUmVnZXhwcyBpbiB0aGUgc3lzdGVtIGNhbiBiZSBl ZmZpY2llbnRseSBleGVjdXRlZC4NClNhbWUgcHJvYmxlbSB3aXRoIHRoZSBvcHQtaW4gZmxhZywg dG8gYmUgdXNlZnVsIGl0IG5lZWRzIHRvIGFwcGx5IHRvIGFsbCBSZWdleHBzLg0KDQpXZSBuZWVk IHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBzZXQgb2YgInNsb3cgcmVnZXhwcyIgY2FuIGNoYW5n ZSBwZXIgUnVieS9SZWdleHAgaW1wbGVtZW50YXRpb24gYW5kIG92ZXIgdGltZS4NCkFsdGhvdWdo IGl0IHNlZW1zIGl0J3MgdmVyeSB2ZXJ5IHNpbWlsYXIgZmVhdHVyZXMgYmVpbmcgcHJvYmxlbWF0 aWMgYmV0d2VlbiB0aGlzIGFwcHJvYWNoIGFuZCBodHRwczovL2VyZWdvbi5tZS9ibG9nL2Fzc2V0 cy9yZXNlYXJjaC9qdXN0LWluLXRpbWUtY29tcGlsaW5nLXJ1YnktcmVnZXhwcy1vbi10cnVmZmxl cnVieS5wZGYgc2xpZGUgMTEuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCkZlYXR1cmUgIzE5MTA0OiBJbnRyb2R1Y2UgdGhlIGNhY2hlLWJhc2VkIG9wdGltaXph dGlvbiBmb3IgUmVnZXhwIG1hdGNoaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1 ZXMvMTkxMDQjY2hhbmdlLTk5OTg1DQoNCiogQXV0aG9yOiBtYWtlX25vd19qdXN0IChLaXRzdW5l IFRTVVlVU0FUTykNCiogU3RhdHVzOiBPcGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClJlZ2V4cCBtYXRjaGluZyBjYXVzZXMg YSB0aW1lLWNvbXBsZXhpdHkgZXhwbG9zaW9uIHByb2JsZW0gYXMga25vd24gYXMgUmVEb1MgKFto dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZURvU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvUmVEb1MpKS4gUmVEb1MgaGFzIGJlY29tZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHkg aW4gbWFueSBwbGFjZXMgaW4gcmVjZW50IHllYXJzLCBhbmQgUnVieSBpcyBubyBleGNlcHRpb24u IFRoZSBmb2xsb3dpbmcgaXMgdGhlIGluY29tcGxldGUgbGlzdCBvZiBzdWNoIHZ1bG5lcmFiaWxp dHkgcmVwb3J0czoNCg0KLSBbaHR0cHM6Ly9naXRodWIuY29tL3NpbmF0cmEvc2luYXRyYS9wdWxs LzE4MjNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5hdHJhL3NpbmF0cmEvcHVsbC8xODIzKQ0KLSBb aHR0cHM6Ly9naXRodWIuY29tL2xvc3Rpc2xhbmQvZmFyYWRheS1uZXRfaHR0cC9wdWxsLzI3XSho dHRwczovL2dpdGh1Yi5jb20vbG9zdGlzbGFuZC9mYXJhZGF5LW5ldF9odHRwL3B1bGwvMjcpDQoN ClRoZXNlIHJlcG9ydHMgaGF2ZSBiZWVuIGFkZHJlc3NlZCBieSBmaXhpbmcgdGhlIGxpYnJhcnkv c29mdHdhcmUgaW1wbGVtZW50YXRpb24uIEJ1dCwgaWYgdGhlIGxhbmd1YWdl4oCZcyBSZWdleHAg aW1wbGVtZW50YXRpb24gYmVjb21lcyBzYWZlLCB0aGUgdnVsbmVyYWJpbGl0eSBpcyBmdW5kYW1l bnRhbGx5IGFyY2hpdmVkLg0KDQpGb3IgYSBmZXcgbW9udGhzLCBSdWJ5IGhhcyBpbXBsZW1lbnRl ZCBhIFJlZ2V4cCBtYXRjaGluZyB0aW1lb3V0IChbaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv aXNzdWVzLzE3ODM3XShodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTc4MzcpKS4g SXQgaXMgb25lIG9mIHRoZSB1c2VmdWwgbWV0aG9kcyBmb3IgcHJldmVudGluZyBSZURvUyB2dWxu ZXJhYmlsaXR5LCBidXQgaXQgaXMgYSBwcm9ibGVtIHRoYXQgc2V0dGluZyBhIGNvcnJlY3QgdGlt ZW91dCB2YWx1ZSBpcyBoYXJkLiBUaGlzIHZhbHVlIGlzIGRlcGVuZGluZyBvbiBpbnB1dCBsZW5n dGgsIGVudmlyb25tZW50LCBuZXR3b3JrIHN0YXR1cywgc3lzdGVtIGxvYWQsIGV0Yy4gV2hlbiB0 aGUgdmFsdWUgaXMgdG9vIHNtYWxsLCBhIHN5c3RlbSBtYXkgYmUgYnJva2VuLCBidXQgd2hlbiB0 aGUgdmFsdWUgaXMgdG9vIGxhcmdlLCBpdCBpcyBub3QgdXNlZnVsIGZvciBwcmV2ZW50aW5nIFJl RG9TLg0KDQpUaGVyZWZvcmUsIGFzIGEgbmV3IHdheSB0byBwcmV2ZW50IFJlRG9TLCB3ZSBwcm9w b3NlIHRvIGludHJvZHVjZSBjYWNoZS1iYXNlZCBvcHRpbWl6YXRpb24gZm9yIFJlZ2V4cCBtYXRj aGluZy4gQXMgQ1MgZnVuZGFtZW50YWwga25vd2xlZGdlLCBhdXRvbWF0b24gbWF0Y2hpbmcgcmVz dWx0IGRlcGVuZHMgb24gdGhlIHBvc2l0aW9uIG9mIGlucHV0IGFuZCBzdGF0ZS4gSW4gYWRkaXRp b24sIG1hdGNoaW5nIHRpbWUgZXhwbG9zaW9uIGlzIGNhdXNlZCBmb3IgcmVwZWF0aW5nIHRvIGFy cml2ZSBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhbmQgc3RhdGUgbWFueSB0aW1lcy4gVGhlbiwgUmVE b1MgY2FuIGJlIHByZXZlbnRlZCB3aGVuIHBhaXJzIG9mIHBvc2l0aW9uLCBhbmQgc3RhdGUgYXJy aXZlZCBvbmNlIGlzIHJlY29yZGVkIChjYWNoZWQpLiBJbiBmYWN0LCB1bmRlciBzdWNoIGFuIG9w dGltaXphdGlvbiwgaXQgaXMga25vd24gYXMgdGhlIG1hdGNoaW5nIHRpbWUgY29tcGxleGl0eSBp cyBsaW5lYXIgYWdhaW5zdCBpbnB1dCBzaXplIFsxXS4NCg0KWzFdOiBEYXZpcywgSmFtZXMgQy4s IEZyYW5jaXNjbyBTZXJ2YW50LCBhbmQgRG9uZ3lvb24gTGVlLiAiVXNpbmcgc2VsZWN0aXZlIG1l bW9pemF0aW9uIHRvIGRlZmVhdCByZWd1bGFyIGV4cHJlc3Npb24gZGVuaWFsIG9mIHNlcnZpY2Ug KFJlRG9TKS4iICoyMDIxIElFRUUgc3ltcG9zaXVtIG9uIHNlY3VyaXR5IGFuZCBwcml2YWN5IChT UCkqLiBJRUVFLCAyMDIxLiBbaHR0cHM6Ly93d3cuY29tcHV0ZXIub3JnL2NzZGwvcHJvY2VlZGlu Z3MtYXJ0aWNsZS9zcC8yMDIxLzg5MzQwMGE1NDMvMW9hazk4OFRodk9dKGh0dHBzOi8vd3d3LmNv bXB1dGVyLm9yZy9jc2RsL3Byb2NlZWRpbmdzLWFydGljbGUvc3AvMjAyMS84OTM0MDBhNTQzLzFv YWs5ODhUaHZPKQ0KDQpTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlLg0KDQpgYGBiYXNoDQokIHJ1 YnkgLS12ZXJzaW9uDQpydWJ5IDMuMi4wcHJldmlldzIgKDIwMjItMDktMDkgbWFzdGVyIDM1Y2Zj OWEzYmIpIFthcm02NC1kYXJ3aW4yMV0NCg0KJCB0aW1lIHJ1YnkgLWUgJy9eKGF8YSkqJC8gPX4g ImEiICogMjggKyAiYiInDQpydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4ICsgImIiJyAg OC40OXMgdXNlciAwLjA0cyBzeXN0ZW0gOTglIGNwdSA4LjY2MyB0b3RhbA0KDQokIC4vbWluaXJ1 YnkgLS12ZXJzaW9uDQpydWJ5IDMuMi4wZGV2ICgyMDIyLTEwLTI3VDEzOjM5OjU2WiByZWNhY2hl IGJjNTliN2NjMWUpIFthcm02NC1kYXJ3aW4yMV0NCg0KJCB0aW1lIC4vbWluaXJ1YnkgLWUgJy9e KGF8YSkqJC8gPX4gImEiICogMjggKyAiYiInDQouL21pbmlydWJ5IC1lICcvXihhfGEpKiQvID1+ ICJhIiAqIDI4ICsgImIiJyAgMC4wMXMgdXNlciAwLjAxcyBzeXN0ZW0gOCUgY3B1IDAuMzEwIHRv dGFsDQpgYGANCg0KSW4gdGhpcyBleGFtcGxlLCB1c2luZyBydWJ5IHYzLjIuMC1wcmV2aWV3Miwg bWF0Y2hpbmcgYC9eKGF8YSkqJC9gIGFnYWluc3QgYCJhIiAqIDI4ICsgImIiYCB0YWtlcyA4LjYg c2Vjb25kcyBiZWNhdXNlIG1hdGNoaW5nIHRpbWUgb2YgdGhpcyBSZWdleHAgdGFrZXMgZXhwb25l bnRpYWxseSBhZ2FpbnN0IGAiYSIgKiBOICsgImIiYCBmb3JtIHN0cmluZy4gQnV0LCB1c2luZyB0 aGUgcGF0Y2hlZCB2ZXJzaW9uIG9mIHJ1YnksIGl0IHRha2VzIDAuMDEgc2Vjb25kcy4gSW5jcmVk aWJseSBpdCBpcyA4NjAgdGltZXMgZmFzdGVyIGJlY2F1c2UgbWF0Y2hpbmcgaXMgZG9uZSBpbiBs aW5lYXIgdGltZS4NCg0KQnkgdGhpcyBvcHRpbWl6YXRpb24sIHRoZSBtYXRjaGluZyB0aW1lIGlz IGxpbmVhciB0byB0aGUgaW5wdXQgc2l6ZS4gSXQgc291bmRzIHNlY3VyZSBhbmQgZ29vZC4gVW5m b3J0dW5hdGVseSwgd2hlbiBSZWdleHAgdXNlcyBzb21lIGV4dGVuc2lvbiAoZS5nLiBsb29rLWFy b3VuZCwgYmFjay1yZWZlcmVuY2UsIHN1YmV4cHJlc3Npb24gY2FsbCksIHRoZSBvcHRpbWl6YXRp b24gaXMgbm90IGFwcGxpZWQuIEFsc28sIHRoZSBvcHRpbWl6YXRpb24gbmVlZHMgYSBiaXQgbW9y ZSBtZW1vcnkgZm9yIGNhY2hpbmcuIEhvd2V2ZXIsIHdlIGhhdmUgYWxyZWFkeSBpbnZlc3RpZ2F0 ZWQgdGhhdCB0aGV5IGFyZSBub3Qgc28gdGhlIG1ham9yIHByb2JsZW1zIChTZWUgdGhlICJMaW1p dGF0aW9uIiBzZWN0aW9uKS4NCg0KIyMgSW1wbGVtZW50YXRpb24NCg0KVGhlIGJhc2ljIGNhY2hl IGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlIGF0IHRoaXMgdGltZSBhbmQgY2FuIGJlIGZvdW5k IGluIHRoZSBmb2xsb3dpbmcgUHVsbCBSZXF1ZXN0Lg0KDQpbaHR0cHM6Ly9naXRodWIuY29tL3J1 YnkvcnVieS9wdWxsLzY0ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2 KQ0KDQpTb21lIHRlc3RzIHNlZW0gdG8gYmUgZmFpbGVkLCBidXQgaXQgaXMgbm8gcHJvYmxlbSEg QmVjYXVzZSB0aGUgZmFpbGVkIHRlc3RzIGFyZSBmb3IgUmVnZXhwIHRpbWVvdXQsIG9wdGltaXph dGlvbiB3b3JrcyBjb3JyZWN0bHkgYW5kIHNvIHRoZXkgZmFpbGVkIGFzIGV4cGVjdGVkLiBPZiBj b3Vyc2UsIHdlIG5lZWQgdG8gZml4IHRoZXNlIHRlc3RzIGJlZm9yZSBtZXJnaW5nLg0KDQpJbXBs ZW1lbnRhdGlvbiBub3RlczoNCg0KLSBBIG51bGwtY2hlY2sgb24gbG9vcCBjYXVzZXMgbm9uLWxp bmVhciBiZWhhdmlvciwgc28gdGhlIGZpZWxkIHRvIGluZGV4IHRoZSBsYXRlc3QgbnVsbC1jaGVj ayBpdGVtIG9uIHRoZSBzdGFjayBpcyBhZGRlZCB0byBPbmlnU3RhY2tUeXBlLiAoW2h0dHBzOi8v Z2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtNDM0NzQ2MGUzNzljZDk3 MGJhMGI4OGI0YWNiMjE1ZWE2MGNiYWUzMDgxMjQ2NzVkZTg4MTFlZWQzNzczNjdhYVI4MzFdKGh0 dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtNDM0NzQ2MGUz NzljZDk3MGJhMGI4OGI0YWNiMjE1ZWE2MGNiYWUzMDgxMjQ2NzVkZTg4MTFlZWQzNzczNjdhYVI4 MzEpKQ0KLSBXaGVuIHRoZSBsb29wIGlzIG51bGwgYW5kIHRoaXMgbG9vcCBoYXMgYSBjYXB0dXJl LCBtYXRjaGluZyBiZWhhdmVzIGFzIGEgbW9ub21hbmlhYy4gVG8gcmVwcm9kdWNlIHRoaXMgYmVo YXZpb3IsIGNhY2hlcyBpbiB0aGUgbG9vcCBpcyBjbGVhcmVkIGFzIG5lY2Vzc2FyeS4gKFtodHRw czovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLWMzY2ZlMTllZmZm MGNjNTE4MTM4NDc0MTM4NjA2N2I4MWVhZGIyNTA1YjhiOWIzZjk4MGQxMGY4MTUwMzczOTVSMzQz M10oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY0ODYvZmlsZXMjZGlmZi1jM2Nm ZTE5ZWZmZjBjYzUxODEzODQ3NDEzODYwNjdiODFlYWRiMjUwNWI4YjliM2Y5ODBkMTBmODE1MDM3 Mzk1UjM0MzMpKQ0KTGlrZSBhIGZsaXAtZmxvcCBvcGVyYXRvciwgd2UgaG9wZSB0byBkcm9wIHRo aXMgaWYgcG9zc2libGUuIEJ1dCBpdCBzdGlsbCByZW1haW5zIGJhY2t3YXJkIGNvbXBhdGliaWxp dHkuDQoNCiMjIyBMaW1pdGF0aW9uDQoNCkNhY2hlLWJhc2VkIG9wdGltaXphdGlvbiBpcyBub3Qg YXBwbGllZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOg0KDQoxLiBSZWdleHAgdXNpbmcgc29tZSBl eHRlbnNpb25zIChiYWNrLXJlZmVyZW5jZSBhbmQgc3ViZXhwcmVzc2lvbiBjYWxsLCBsb29rLWFy b3VuZCwgYXRvbWljLCBhYnNlbnQgb3BlcmF0b3JzKSBpcyBub3Qgb3B0aW1pemVkIGJlY2F1c2Ug aXQgaXMgaW1wb3NzaWJsZSBvciBoYXJkLiBIb3dldmVyLCBpdCBtYXkgYmUgcG9zc2libGUgZm9y IGxvb2stYXJvdW5kIG9wZXJhdG9ycy4NCjIuIEEgYm91bmRlZCBvciBmaXhlZCB0aW1lcyByZXBl dGl0aW9uIG5lc3RpbmcgaW4gYW5vdGhlciByZXBldGl0aW9uIChlLmcuIGAvKGF7MiwzfSkqL2Ap LiBJdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBpc3N1ZSBlbnRpcmVseSwgYnV0IHdlIGJlbGlldmUg aXQgaXMgaGFyZCB0byBzdXBwb3J0IHRoaXMgY2FzZSBjb3JyZWN0bHkuDQozLiBCb3VuZGVkIG9y IGZpeGVkIHRpbWVzIHJlcGV0aXRpb24gaXMgdG9vIGxhcmdlIChlLmcuIGAvKGF8Yil7MTAwMDAw LDIwMDAwMH0vYCkuIFRoZSBjYWNoZSB0YWJsZSBzaXplIGlzIHByb3BvcnRpb25hbCB0byB0aGUg cHJvZHVjdCBvZiB0aGUgbnVtYmVyIG9mIGNhY2hlIHBvaW50cyBvZiByZWdleCBhbmQgaW5wdXQg c2l6ZS4gSW4gdGhpcyBjYXNlLCBzaW5jZSB0aGUgbnVtYmVyIG9mIGNhY2hlIHBvaW50cyBiZWNv bWVzIHRvbyBsYXJnZSwgdGhlIG9wdGltaXphdGlvbiBjYW5ub3QgYmUgYXBwbGllZC4NCg0KRXhw ZXJpbWVudHMgd2VyZSBjb25kdWN0ZWQgdG8gaW52ZXN0aWdhdGUgaG93IHRoZXNlIGxpbWl0YXRp b25zIGFyZSBwcm9ibGVtYXRpYyBpbiBwcmFjdGljZS4gV2UgdXNlZCBPYmplY3RTcGFjZSB0byBj b2xsZWN0IFJlZ2V4cHMgYW5kIGludmVzdGlnYXRlIHdoZXRoZXIgdGhleSBjb3VsZCBiZSBvcHRp bWl6ZWQgYW5kIHRoZSBudW1iZXIgb2YgY2FjaGUgcG9pbnRzLiBSZWdleHBzIHdlcmUgY29sbGVj dGVkIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnksIFdlYnJpY2ssIGFuZCBSYWlscy4gU2VlIHRo ZSBmb2xsb3dpbmcgZ2lzdCBmb3IgdGhlIGRldGFpbHMgKFtodHRwczovL2dpc3QuZ2l0aHViLmNv bS9tYWtlbm93anVzdC84M2UxZTc1YTJkN2RlOGI5NTZlOTNiZGFjMDA0YTA2Yl0oaHR0cHM6Ly9n aXN0LmdpdGh1Yi5jb20vbWFrZW5vd2p1c3QvODNlMWU3NWEyZDdkZThiOTU2ZTkzYmRhYzAwNGEw NmIpKS4NCg0KVGhlIGV4cGVyaW1lbnRzIHJlc3VsdCBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5n IHRhYmxlLg0KDQp8IENvbGxlY3RlZCBmcm9tIHwgIyBSZWdleHAgfCAjIG5vbi1vcHRpbWl6YWJs ZSB8IE1heGltdW0gbnVtYmVyIG9mIGNhY2hlIHBvaW50cyB8DQp8IC0tLSB8IC0tLSB8IC0tLSB8 IC0tLSB8DQp8IHN0ZGxpYiB8IDEwMDkgfCA4NiAoOC41MiUpIHwgODEgfA0KfCBXZWJyaWNrIHwg MzU2IHwgNDQgKDEyLjM2JSkgfCAyMCB8DQp8IFJhaWxzIHwgNzU5IHwgNzQgKDcuNzUlKSB8IDI3 IHwNCnwgVG90YWwgPGJyPiAoRHVwbGljYXRpb25zIGFyZSByZWR1Y2VkKSB8IDE1MDYgfCAxMTgg KDcuODQlKSB8IDgxIHwNCg0KVGhpcyByZXN1bHQgc2hvd3MgdGhhdCB0aGUgcGVyY2VudGFnZSBv ZiBub24tb3B0aW1pemFibGUgUmVnZXhwIGlzIGxlc3MgdGhhbiAxMCUsIGFuZCB0aGUgYW1vdW50 IG9mIG1lbW9yeSB1c2VkIGZvciBvcHRpbWl6YXRpb24gaXMgYWJvdXQgMTAgdGltZXMgdGhlIGxl bmd0aCBvZiB0aGUgc3RyaW5nICg4MS84LCBmb3IgYSBiaXQgYXJyYXkpIGF0IHdvcnN0IGluIHRo aXMgY2FzZS4gSXQgaXMgY29uc2lkZXJlZCB0aGF0IGEgc3VmZmljaWVudCBudW1iZXIgb2YgUmVn ZXhwIGNhbiBiZSBvcHRpbWl6ZWQgaW4gcHJhY3RpY2UuDQoNCiMjIFNwZWNpZmljYXRpb24NCg0K VGhlIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaGFzIGJlZW4gZml4ZWQgeWV0LiBXZSBoYXZlIHNv bWUgaWRlYXMgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGlzY3VzcyB0aGVtLg0KDQotIFdoZW4gaXMg b3B0aW1pemF0aW9uIGVuYWJsZWQ/IEN1cnJlbnRseSwgaXQgdHVybnMgb24gd2hlbiB0aGUgYmFj a3RyYWNrIGNhdXNlcyBhcyBtYW55IGFzIHRoZSBpbnB1dCBsZW5ndGguDQotIEhvdyB0aGUgbnVt YmVyIG9mIGNhY2hlIHBvaW50cyBpcyBhbGxvd2VkLCBhbmQgaG93IG1lbW9yeSBjYW4gYmUgYWxs b2NhdGVkPyBJdCBpcyBub3QgZGV0ZXJtaW5lZCBmb3Igbm93Lg0KLSBJZiB0aGUgYWJvdmUgcGFy YW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHVzZXJzLCBob3cgYXJlIHRoZXkgc3BlY2lmaWVk PyAodmlhIGNvbW1hbmQtbGluZSBmbGFncywgb3Igc3RhdGljIC8gaW5zdGFuY2UgcGFyYW1ldGVy cyBsaWtlIGBSZWdleHAjLnRpbWVvdXQ9YCBhbmQgYFJlZ2V4cCN0aW1lb3V0PWApDQotIFVubGVz cyB0aGUgaW5wdXQgc2l6ZSBpcyB0b28gbGFyZ2UsIHRoZSBhdmFpbGFiaWxpdHkgb2Ygb3B0aW1p emF0aW9uIGNhbiBiZSBkZXRlcm1pbmVkIG9uIGNvbXBpbGUtdGltZS4gU28sIHdlIHdvdWxkIGxp a2UgdG8gYWRkIGEgbmV3IGZsYWcgdG8gUmVnZXhwIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY2Fj aGUgaXMgYXZhaWxhYmxlLiBJdCBiZWNvbWVzIG9uZSBvZiB0aGUgY3JpdGVyaWEgZm9yIHdoZXRo ZXIgUmVnZXhwIGlzIGVmZmljaWVudGx5IGV4ZWN1dGFibGUgb3Igbm90LiBXZSBiZWxpZXZlIGl0 IGhlbHBzIHVzZXJzLiBUaHVzLCB3aGljaCBsZXR0ZXIgaXMgcHJlZmVycmVkIGZvciB0aGlzIHB1 cnBvc2U/IGBsYCAobGluZWFyKSBvciBgcmAgKHJlZ3VsYXIpIHNvdW5kcyBnb29kLCBidXQgSSBh bSBub3Qgc3VyZSB3aGljaCBpcyB0aGUgYmVzdC4NCg0KVGhhbmsgeW91Lg0KDQoNCg0KLS0gDQpo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNv cmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlz dHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==