[ruby-core:117601] [Ruby master Feature#20425] Optimize forwarding callers and callees
From:
"tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>
Date:
2024-04-18 22:10:58 UTC
List:
ruby-core #117601
SXNzdWUgIzIwNDI1IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQprbzEgKEtvaWNoaSBTYXNhZGEpIHdyb3RlIGluICNub3RlLTY6DQo+ IE15IGlkZWEgaXMgc2ltcGxlIGJlY2F1c2UgaXQgaXMgc2ltcGxlIHJlcGxhY2VtZW50IHdpdGgg YW4gYXJyYXkgKGFuZCBhIGhhc2gpIHRvIGNvbnRhaW4gYXJndW1lbnRzIChJIG9ubHkgcHJvcG9z ZWQgbGlnaHR3ZWlnaHQgYXJndW1lbnQgY29udGFpbmVyIHRoYW4gYW4gYXJyYXkgYW5kIGhhc2gp Lg0KPiANCj4gVGhpcyBwcm9wb3NhbCBicmVha3MgdGhlIGFzc3VtcHRpb24gb2YgVk0gc3RhY2sg c3RydWN0dXJlLiBJJ20gYWZyYWlkIHRoaXMga2luZCBvZiBicmVha2FnZSBjYW4gY2F1c2Ugc2Vy aW91cyBpc3N1ZS4NCg0KRm9yIHdoYXQgaXQncyB3b3J0aCwgd2UndmUgdGVzdGVkIHRoaXMgcGF0 Y2ggaW4gU2hvcGlmeSBDSSBhbmQgaXQncyBwYXNzaW5nIGFsbCB0ZXN0cy4gIFdlIG1pZ2h0IGJl IGFibGUgdG8gdHJ5IGluIHByb2R1Y3Rpb24sIGJ1dCBJIG5lZWQgdG8gYXNrIHNvbWUgcGVvcGxl Lg0KDQo+IEJ1dCBJIGNhbiBtaXN1bmRlcnN0YW5kIHNvIGxldCdzIHRhbGsgYXQgUnVieUthaWdp LCBPa2luYXdhIHdpdGggYSB3aGl0ZWJvYXJkLg0KDQpTdXJlLCB3ZSBjYW4gZGlzY3VzcyBpdCBh dCBSdWJ5S2FpZ2kuICBJIGFncmVlIHlvdXIgcHJvcG9zYWwgd291bGQgbWFpbnRhaW4gc3RhY2sg bGF5b3V0IHdoZW4gY2FsbGluZyBpbiB0byBgLi4uYCBtZXRob2RzLCBidXQgSSBkb24ndCB0aGlu ayB0aGUgY29kZSB3b3VsZCBiZSBhbnkgbW9yZSBzaW1wbGUgZHVlIHRvIGV4dHJhIG1lbW9yeSBt YW5hZ2VtZW50IC8gR0MgY29tcGxleGl0eS4gIEkgd2FzIGFibGUgdG8gc2ltcGxpZnkgdGhlIHBh dGNoIHNvbWV3aGF0LCBzbyBwbGVhc2UgdGFrZSBhIGxvb2sgYWdhaW4uDQoNCkkgZGVjaWRlZCB0 byB0ZXN0IHRoaXMgYWdhaW5zdCBSYWlsc0JlbmNoLCBhbmQgdGhpcyBwYXRjaCBkb2VzIHNwZWVk IHVwIFJhaWxzQmVuY2ggKHNsaWdodGx5KS4NCg0KSGVyZSBpcyBSYWlsc0JlbmNoIHdpdGggbWFz dGVyOg0KDQpgYGANCiQgYnVuZGxlIGV4ZWMgcnVieSBiZW5jaG1hcmsucmINCnJ1YnkgMy40LjBk ZXYgKDIwMjQtMDQtMThUMjE6MTE6MjVaIG1hc3RlciA2NGQwODE3ZWE5KSBbYXJtNjQtZGFyd2lu MjNdDQpDb21tYW5kOiBidW5kbGUgY2hlY2sgMj4gL2Rldi9udWxsIHx8IGJ1bmRsZSBpbnN0YWxs DQpUaGUgR2VtZmlsZSdzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkDQpDb21tYW5kOiBiaW4v cmFpbHMgZGI6bWlncmF0ZSBkYjpzZWVkDQpVc2luZyAxMDAgcG9zdHMgaW4gdGhlIGRhdGFiYXNl DQppdHIgIzE6IDE1NTRtcw0KaXRyICMyOiAxNTE5bXMNCml0ciAjMzogMTUxNW1zDQppdHIgIzQ6 IDE1NTNtcw0KaXRyICM1OiAxNTUwbXMNCml0ciAjNjogMTUyNm1zDQppdHIgIzc6IDE1NzRtcw0K aXRyICM4OiAxNTIybXMNCml0ciAjOTogMTUyMW1zDQppdHIgIzEwOiAxNTI5bXMNCml0ciAjMTE6 IDE1MjZtcw0KaXRyICMxMjogMTU1MG1zDQppdHIgIzEzOiAxNTIybXMNCml0ciAjMTQ6IDE1NTFt cw0KaXRyICMxNTogMTU0MW1zDQppdHIgIzE2OiAxNTM4bXMNCml0ciAjMTc6IDE1NTJtcw0KaXRy ICMxODogMTUzNm1zDQppdHIgIzE5OiAxNTYwbXMNCml0ciAjMjA6IDE1NDltcw0KaXRyICMyMTog MTUzNm1zDQppdHIgIzIyOiAxNTI5bXMNCml0ciAjMjM6IDE1NDJtcw0KaXRyICMyNDogMTUwMm1z DQppdHIgIzI1OiAxNTU5bXMNClJTUzogMTM5LjFNaUINCk1BWFJTUzogMTQyNjQwLjBNaUINCldy aXRpbmcgZmlsZSAvVXNlcnMvYWFyb24vZ2l0L3lqaXQtYmVuY2gvYmVuY2htYXJrcy9yYWlsc2Jl bmNoL2RhdGEvcmVzdWx0cy1ydWJ5LTMuNC4wLTIwMjQtMDQtMTgtMTQzNzEwLmpzb24NCkF2ZXJh Z2Ugb2YgbGFzdCAxMCwgbm9uLXdhcm11cCBpdGVyczogMTU0MG1zDQpgYGANCg0KSGVyZSBpcyBS YWlsc0JlbmNoIHdpdGggdGhlIGAuLi5gIG9wdGltaXphdGlvbjoNCg0KYGBgDQokIGJ1bmRsZSBl eGVjIHJ1YnkgYmVuY2htYXJrLnJiDQpydWJ5IDMuNC4wZGV2ICgyMDI0LTA0LTE4VDIxOjIwOjIz WiBzcGVlZC1mb3J3YXJkIDRkNjk4ZTZkNDYpIFthcm02NC1kYXJ3aW4yM10NCkNvbW1hbmQ6IGJ1 bmRsZSBjaGVjayAyPiAvZGV2L251bGwgfHwgYnVuZGxlIGluc3RhbGwNClRoZSBHZW1maWxlJ3Mg ZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQNCkNvbW1hbmQ6IGJpbi9yYWlscyBkYjptaWdyYXRl IGRiOnNlZWQNClVzaW5nIDEwMCBwb3N0cyBpbiB0aGUgZGF0YWJhc2UNCml0ciAjMTogMTUzN21z DQppdHIgIzI6IDE1MjNtcw0KaXRyICMzOiAxNDk1bXMNCml0ciAjNDogMTUwMW1zDQppdHIgIzU6 IDE1MjBtcw0KaXRyICM2OiAxNTE0bXMNCml0ciAjNzogMTUxNG1zDQppdHIgIzg6IDE0ODZtcw0K aXRyICM5OiAxNTI0bXMNCml0ciAjMTA6IDE0OTNtcw0KaXRyICMxMTogMTQ3Mm1zDQppdHIgIzEy OiAxNTA5bXMNCml0ciAjMTM6IDE0OTdtcw0KaXRyICMxNDogMTQ5Mm1zDQppdHIgIzE1OiAxNTAw bXMNCml0ciAjMTY6IDE1MDdtcw0KaXRyICMxNzogMTUyNm1zDQppdHIgIzE4OiAxNTAybXMNCml0 ciAjMTk6IDE1MDVtcw0KaXRyICMyMDogMTQ5Mm1zDQppdHIgIzIxOiAxNTAxbXMNCml0ciAjMjI6 IDE1Mjltcw0KaXRyICMyMzogMTUxOW1zDQppdHIgIzI0OiAxNTM3bXMNCml0ciAjMjU6IDE0OTlt cw0KUlNTOiAxNDAuME1pQg0KTUFYUlNTOiAxNDM1MDQuME1pQg0KV3JpdGluZyBmaWxlIC9Vc2Vy cy9hYXJvbi9naXQveWppdC1iZW5jaC9iZW5jaG1hcmtzL3JhaWxzYmVuY2gvZGF0YS9yZXN1bHRz LXJ1YnktMy40LjAtMjAyNC0wNC0xOC0xNDM2MjMuanNvbg0KQXZlcmFnZSBvZiBsYXN0IDEwLCBu b24td2FybXVwIGl0ZXJzOiAxNTEybXMNCmBgYA0KDQpBdmVyYWdlIGl0ZXJhdGlvbiBkZWNyZWFz ZXMgYWJvdXQgMjhtcy4gIEJhc2ljYWxseSBzaW1pbGFyIHJlc3VsdHMgb24gbXkgeDg2IG1hY2hp bmUuDQoNCm1hc3RlcjoNCg0KYGBgDQphYXJvbkB3aGl0ZWNsYXcgfi9nL3kvYi9yYWlsc2JlbmNo IChtYWluKT4gYnVuZGxlIGV4ZWMgcnVieSBiZW5jaG1hcmsucmINCnJ1YnkgMy40LjBkZXYgKDIw MjQtMDQtMThUMjE6MjE6MDFaIG1hc3RlciA2NDQzZDY5MGFlKSBbeDg2XzY0LWxpbnV4XQ0KQ29t bWFuZDogYnVuZGxlIGNoZWNrIDI+IC9kZXYvbnVsbCB8fCBidW5kbGUgaW5zdGFsbA0KVGhlIEdl bWZpbGUncyBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZA0KQ29tbWFuZDogYmluL3JhaWxzIGRi Om1pZ3JhdGUgZGI6c2VlZA0KVXNpbmcgMTAwIHBvc3RzIGluIHRoZSBkYXRhYmFzZQ0KaXRyICMx OiAyMjI3bXMNCml0ciAjMjogMjE3M21zDQppdHIgIzM6IDIxNzRtcw0KaXRyICM0OiAyMTcxbXMN Cml0ciAjNTogMjE3N21zDQppdHIgIzY6IDIxNzFtcw0KaXRyICM3OiAyMTcybXMNCml0ciAjODog MjE3MW1zDQppdHIgIzk6IDIxNzBtcw0KaXRyICMxMDogMjE3M21zDQppdHIgIzExOiAyMTcwbXMN Cml0ciAjMTI6IDIxNzNtcw0KaXRyICMxMzogMjE3MG1zDQppdHIgIzE0OiAyMTcxbXMNCml0ciAj MTU6IDIxNzRtcw0KaXRyICMxNjogMjE3MW1zDQppdHIgIzE3OiAyMTczbXMNCml0ciAjMTg6IDIx NzBtcw0KaXRyICMxOTogMjE3Nm1zDQppdHIgIzIwOiAyMTY5bXMNCml0ciAjMjE6IDIxNzVtcw0K aXRyICMyMjogMjE2OW1zDQppdHIgIzIzOiAyMTcwbXMNCml0ciAjMjQ6IDIxNzNtcw0KaXRyICMy NTogMjE3MG1zDQpSU1M6IDExMC4wTWlCDQpNQVhSU1M6IDExMC4xTWlCDQpXcml0aW5nIGZpbGUg L2hvbWUvYWFyb24vZ2l0L3lqaXQtYmVuY2gvYmVuY2htYXJrcy9yYWlsc2JlbmNoL2RhdGEvcmVz dWx0cy1ydWJ5LTMuNC4wLTIwMjQtMDQtMTgtMTUwNDE4Lmpzb24NCkF2ZXJhZ2Ugb2YgbGFzdCAx MCwgbm9uLXdhcm11cCBpdGVyczogMjE3MW1zDQpgYGANCg0KVGhpcyBicmFuY2g6DQoNCmBgYA0K YWFyb25Ad2hpdGVjbGF3IH4vZy95L2IvcmFpbHNiZW5jaCAobWFpbik+IGJ1bmRsZSBleGVjIHJ1 YnkgYmVuY2htYXJrLnJiDQpydWJ5IDMuNC4wZGV2ICgyMDI0LTA0LTE4VDIxOjIwOjIzWiBzcGVl ZC1mb3J3YXJkIDRkNjk4ZTZkNDYpIFt4ODZfNjQtbGludXhdDQpDb21tYW5kOiBidW5kbGUgY2hl Y2sgMj4gL2Rldi9udWxsIHx8IGJ1bmRsZSBpbnN0YWxsDQpUaGUgR2VtZmlsZSdzIGRlcGVuZGVu Y2llcyBhcmUgc2F0aXNmaWVkDQpDb21tYW5kOiBiaW4vcmFpbHMgZGI6bWlncmF0ZSBkYjpzZWVk DQpVc2luZyAxMDAgcG9zdHMgaW4gdGhlIGRhdGFiYXNlDQppdHIgIzE6IDIxOTltcw0KaXRyICMy OiAyMTU3bXMNCml0ciAjMzogMjE1OG1zDQppdHIgIzQ6IDIxNTNtcw0KaXRyICM1OiAyMTU2bXMN Cml0ciAjNjogMjE1N21zDQppdHIgIzc6IDIxNTVtcw0KaXRyICM4OiAyMTUzbXMNCml0ciAjOTog MjE1Mm1zDQppdHIgIzEwOiAyMTYwbXMNCml0ciAjMTE6IDIxNTNtcw0KaXRyICMxMjogMjE1Nm1z DQppdHIgIzEzOiAyMTUzbXMNCml0ciAjMTQ6IDIxNTltcw0KaXRyICMxNTogMjE1NG1zDQppdHIg IzE2OiAyMTU0bXMNCml0ciAjMTc6IDIxNTdtcw0KaXRyICMxODogMjE1NW1zDQppdHIgIzE5OiAy MTU4bXMNCml0ciAjMjA6IDIxNTJtcw0KaXRyICMyMTogMjE1Nm1zDQppdHIgIzIyOiAyMTU0bXMN Cml0ciAjMjM6IDIxNTNtcw0KaXRyICMyNDogMjE1Nm1zDQppdHIgIzI1OiAyMTUxbXMNClJTUzog MTA3LjdNaUINCk1BWFJTUzogMTA3LjhNaUINCldyaXRpbmcgZmlsZSAvaG9tZS9hYXJvbi9naXQv eWppdC1iZW5jaC9iZW5jaG1hcmtzL3JhaWxzYmVuY2gvZGF0YS9yZXN1bHRzLXJ1YnktMy40LjAt MjAyNC0wNC0xOC0xNTA1MjAuanNvbg0KQXZlcmFnZSBvZiBsYXN0IDEwLCBub24td2FybXVwIGl0 ZXJzOiAyMTU0bXMNCmBgYA0KDQpNYXliZSB3ZSBjb3VsZCB0cnkgbWVyZ2luZyB0aGlzPyAgV2Ug Y2FuIHJldmVydCBpZiBpdCBjYXVzZXMgcHJvYmxlbXMuICBBbnl3YXksIEknbSBoYXBweSB0byBk aXNjdXNzIGluIE9raW5hd2EhIPCfmIQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KRmVhdHVyZSAjMjA0MjU6IE9wdGltaXplIGZvcndhcmRpbmcgY2FsbGVycyBh bmQgY2FsbGVlcw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwNDI1I2NoYW5n ZS0xMDgwMTANCg0KKiBBdXRob3I6IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9uIFBhdHRlcnNvbikN CiogU3RhdHVzOiBPcGVuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpbVGhpcyBQUl0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzEwNTEwKSBvcHRp bWl6ZXMgZm9yd2FyZGluZyBjYWxsZXJzIGFuZCBjYWxsZWVzLiBJdCBvbmx5IG9wdGltaXplcyBt ZXRob2RzIHRoYXQgb25seSB0YWtlIGAuLi5gIGFzIHRoZWlyIHBhcmFtZXRlciwgYW5kIHRoZW4g cGFzcyBgLi4uYCB0byBvdGhlciBjYWxscy4NCg0KQ2FsbHMgaXQgb3B0aW1pemVzIGxvb2sgbGlr ZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgYmFyKGEpID0gYQ0KZGVmIGZvbyguLi4pID0gYmFyKC4u LikgIyBvcHRpbWl6ZWQNCmZvbygxMjMpDQpgYGANCg0KYGBgcnVieQ0KZGVmIGJhcihhKSA9IGEN CmRlZiBmb28oLi4uKSA9IGJhcigxLCAyLCAuLi4pICMgb3B0aW1pemVkDQpmb28oMTIzKQ0KYGBg DQoNCmBgYHJ1YnkNCmRlZiBiYXIoKmEpID0gYQ0KDQpkZWYgZm9vKC4uLikNCiAgbGlzdCA9IFsx LCAyXQ0KICBiYXIoKmxpc3QsIC4uLikgIyBvcHRpbWl6ZWQNCmVuZA0KZm9vKDEyMykNCmBgYA0K DQpBbGwgdmFyaWFudHMgb2YgdGhlIGFib3ZlIGJ1dCB1c2luZyBgc3VwZXJgIGFyZSBhbHNvIG9w dGltaXplZCwgaW5jbHVkaW5nIGEgYmFyZSBzdXBlciBsaWtlIHRoaXM6DQoNCmBgYHJ1YnkNCmRl ZiBmb28oLi4uKQ0KICBzdXBlcg0KZW5kDQpgYGANCg0KVGhpcyBwYXRjaCBlbGltaW5hdGVzIGlu dGVybWVkaWF0ZSBhbGxvY2F0aW9ucyBtYWRlIHdoZW4gY2FsbGluZyBtZXRob2RzIHRoYXQgYWNj ZXB0IGAuLi5gLg0KV2UgY2FuIG9ic2VydmUgYWxsb2NhdGlvbiBlbGltaW5hdGlvbiBsaWtlIHRo aXM6DQoNCmBgYHJ1YnkNCmRlZiBtDQogIHggPSBHQy5zdGF0KDp0b3RhbF9hbGxvY2F0ZWRfb2Jq ZWN0cykNCiAgeWllbGQNCiAgR0Muc3RhdCg6dG90YWxfYWxsb2NhdGVkX29iamVjdHMpIC0geA0K ZW5kDQoNCmRlZiBiYXIoYSkgPSBhDQpkZWYgZm9vKC4uLikgPSBiYXIoLi4uKQ0KDQpkZWYgdGVz dA0KICBtIHsgZm9vKDEyMykgfQ0KZW5kDQoNCnRlc3QNCnAgdGVzdCAjIGFsbG9jYXRlcyAxIG9i amVjdCBvbiBtYXN0ZXIsIGJ1dCAwIG9iamVjdHMgd2l0aCB0aGlzIHBhdGNoDQpgYGANCg0KYGBg cnVieQ0KZGVmIGJhcihhLCBiOikgPSBhICsgYg0KZGVmIGZvbyguLi4pID0gYmFyKC4uLikNCg0K ZGVmIHRlc3QNCiAgbSB7IGZvbygxLCBiOiAyKSB9DQplbmQNCg0KdGVzdA0KcCB0ZXN0ICMgYWxs b2NhdGVzIDIgb2JqZWN0cyBvbiBtYXN0ZXIsIGJ1dCAwIG9iamVjdHMgd2l0aCB0aGlzIHBhdGNo DQpgYGANCg0KIyMgSG93IGRvZXMgaXQgd29yaz8NCg0KVGhpcyBwYXRjaCB3b3JrcyBieSB1c2lu ZyBhIGR5bmFtaWMgc3RhY2sgc2l6ZSB3aGVuIHBhc3NpbmcgZm9yd2FyZGVkIHBhcmFtZXRlcnMg dG8gY2FsbGVlcy4NClRoZSBjYWxsZXIncyBpbmZvIG9iamVjdCAoa25vd24gYXMgdGhlICJDSSIp IGNvbnRhaW5zIHRoZSBzdGFjayBzaXplIG9mIHRoZQ0KcGFyYW1ldGVycywgc28gd2UgcGFzcyB0 aGUgQ0kgb2JqZWN0IGl0c2VsZiBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2FsbGVlLg0KV2hlbiBm b3J3YXJkaW5nIHBhcmFtZXRlcnMsIHRoZSBmb3J3YXJkaW5nIElTZXEgdXNlcyB0aGUgY2FsbGVy J3MgQ0kgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHN0YWNrIHRvIGNvcHksIHRoZW4gY29waWVzIHRo ZSBjYWxsZXIncyBzdGFjayBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGVlLg0KVGhlIENJIGF0IHRo ZSBmb3J3YXJkZWQgY2FsbCBzaXRlIGlzIGFkanVzdGVkIHVzaW5nIGluZm9ybWF0aW9uIGZyb20g dGhlIGNhbGxlcidzIENJLg0KDQpJIHRoaW5rIHRoaXMgZGVzY3JpcHRpb24gaXMga2luZCBvZiBj b25mdXNpbmcsIHNvIGxldCdzIHdhbGsgdGhyb3VnaCBhbiBleGFtcGxlIHdpdGggY29kZS4NCg0K YGBgcnVieQ0KZGVmIGRlbGVnYXRlZShhLCBiKSA9IGEgKyBiDQoNCmRlZiBkZWxlZ2F0b3IoLi4u KQ0KICBkZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldBUkRJTkcpDQplbmQNCg0KZGVmIGNhbGxl cg0KICBkZWxlZ2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6IDIpDQplbmQNCmBgYA0KDQpCZWZvcmUg d2UgY2FsbCB0aGUgZGVsZWdhdG9yIG1ldGhvZCwgdGhlIHN0YWNrIGxvb2tzIGxpa2UgdGhpczoN Cg0KYGBgDQpFeGVjdXRpbmcgTGluZSB8IENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBTdGFjaw0KLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLQ0KICAgICAgICAgICAgICAxfCBkZWYgZGVsZWdhdGVlKGEs IGIpID0gYSArIGIgICAgICAgICAgIHwgc2VsZg0KICAgICAgICAgICAgICAyfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMQ0KICAgICAgICAgICAgICAzfCBkZWYgZGVs ZWdhdG9yKC4uLikgICAgICAgICAgICAgICAgICAgIHwgMg0KICAgICAgICAgICAgICA0fCAgICMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgNXwgICBk ZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldBUkRJTkcpICB8DQogICAgICAgICAgICAgIDZ8IGVu ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgICAgICAgICAgICA3fCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgOHwg ZGVmIGNhbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgLT4gIDl8 ICAgZGVsZWdhdG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKSAgICAgfA0KICAgICAgICAgICAgIDEw fCBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCmBgYA0KDQpUaGUgSVNl cSBmb3IgYGRlbGVnYXRvcmAgaXMgdGFnZ2VkIGFzICJmb3J3YXJkYWJsZSIsIHNvIHdoZW4gYGNh bGxlcmAgY2FsbHMgaW4NCnRvIGBkZWxlZ2F0b3JgLCBpdCB3cml0ZXMgYENJMWAgb24gdG8gdGhl IHN0YWNrIGFzIGEgbG9jYWwgdmFyaWFibGUgZm9yIHRoZQ0KYGRlbGVnYXRvcmAgbWV0aG9kLiAg VGhlIGBkZWxlZ2F0b3JgIG1ldGhvZCBoYXMgYSBzcGVjaWFsIGxvY2FsIGNhbGxlZCBgLi4uYA0K dGhhdCBob2xkcyB0aGUgY2FsbGVyJ3MgQ0kgb2JqZWN0Lg0KDQpIZXJlIGlzIHRoZSBJU2VxIGRp c2FzbSBmbyBgZGVsZWdhdG9yYDoNCg0KYGBgDQo9PSBkaXNhc206ICM8SVNlcTpkZWxlZ2F0b3JA LWU6MSAoMSwwKS0oMSwzOSk+DQpsb2NhbCB0YWJsZSAoc2l6ZTogMSwgYXJnYzogMCBbb3B0czog MCwgcmVzdDogLTEsIHBvc3Q6IDAsIGJsb2NrOiAtMSwga3c6IC0xQC0xLCBrd3Jlc3Q6IC0xXSkN ClsgMV0gIi4uLiJAMA0KMDAwMCBwdXRzZWxmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICggICAxKVtMaUNhXQ0KMDAwMSBnZXRsb2NhbF9X Q18wICAgICAgICAgICAgICAgICAgICAgICAgICAiLi4uIkAwDQowMDAzIHNlbmQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDxjYWxsZGF0YSFtaWQ6ZGVsZWdhdGVlLCBhcmdjOjAs IEZDQUxMfEZPUldBUkRJTkc+LCBuaWwNCjAwMDYgbGVhdmUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgW1JlXQ0KYGBgDQoNClRoZSBsb2NhbCBjYWxsZWQgYC4uLmAgd2lsbCBjb250 YWluIHRoZSBjYWxsZXIncyBDSTogQ0kxLg0KDQpIZXJlIGlzIHRoZSBzdGFjayB3aGVuIHdlIGVu dGVyIGBkZWxlZ2F0b3JgOg0KDQoNCmBgYA0KRXhlY3V0aW5nIExpbmUgfCBDb2RlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3RhY2sNCi0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0NCiAgICAgICAgICAgICAg MXwgZGVmIGRlbGVnYXRlZShhLCBiKSA9IGEgKyBiICAgICAgICAgICB8IHNlbGYNCiAgICAgICAg ICAgICAgMnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDENCiAgICAg ICAgICAgICAgM3wgZGVmIGRlbGVnYXRvciguLi4pICAgICAgICAgICAgICAgICAgICB8IDINCiAg ICAgICAgICAgLT4gNHwgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENJ MSAoYXJnYzogMikNCiAgICAgICAgICAgICAgNXwgICBkZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZP UldBUkRJTkcpICB8IGNyZWZfb3JfbWUNCiAgICAgICAgICAgICAgNnwgZW5kICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHNwZWN2YWwNCiAgICAgICAgICAgICAgN3wgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUNCiAgICAgICAgICAgICAgOHwg ZGVmIGNhbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgICAgICAgICAgIDl8 ICAgZGVsZWdhdG9yKDEsIDIpICMgQ0kxIChhcmdjOiAyKSAgICAgfA0KICAgICAgICAgICAgIDEw fCBlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCmBgYA0KDQpUaGUgQ0kg YXQgYGRlbGVnYXRlZWAgb24gbGluZSA1IGlzIHRhZ2dlZCBhcyAiRk9SV0FSRElORyIsIHNvIGl0 IGtub3dzIHRvDQptZW1jb3B5IHRoZSBjYWxsZXIncyBzdGFjayBiZWZvcmUgY2FsbGluZyBgZGVs ZWdhdGVlYC4gIEluIHRoaXMgY2FzZSwgaXQgd2lsbA0KbWVtY29weSBzZWxmLCAxLCBhbmQgMiB0 byB0aGUgc3RhY2sgYmVmb3JlIGNhbGxpbmcgYGRlbGVnYXRlZWAuICBJdCBrbm93cyBob3cgbXVj aA0KbWVtb3J5IHRvIGNvcHkgZnJvbSB0aGUgY2FsbGVyIGJlY2F1c2UgYENJMWAgY29udGFpbnMg c3RhY2sgc2l6ZSBpbmZvcm1hdGlvbg0KKGFyZ2M6IDIpLg0KDQpCZWZvcmUgZXhlY3V0aW5nIHRo ZSBgc2VuZGAgaW5zdHJ1Y3Rpb24sIHdlIHB1c2ggYC4uLmAgb24gdGhlIHN0YWNrLiAgVGhlDQpg c2VuZGAgaW5zdHJ1Y3Rpb24gcG9wcyBgLi4uYCwgYW5kIGJlY2F1c2UgaXQgaXMgdGFnZ2VkIHdp dGggYEZPUldBUkRJTkdgLCBpdA0Ka25vd3MgdG8gbWVtY29weSAodXNpbmcgdGhlIGluZm9ybWF0 aW9uIGluIHRoZSBDSSBpdCBqdXN0IHBvcHBlZCk6DQoNCmBgYA0KPT0gZGlzYXNtOiAjPElTZXE6 ZGVsZWdhdG9yQC1lOjEgKDEsMCktKDEsMzkpPg0KbG9jYWwgdGFibGUgKHNpemU6IDEsIGFyZ2M6 IDAgW29wdHM6IDAsIHJlc3Q6IC0xLCBwb3N0OiAwLCBibG9jazogLTEsIGt3OiAtMUAtMSwga3dy ZXN0OiAtMV0pDQpbIDFdICIuLi4iQDANCjAwMDAgcHV0c2VsZiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgMSlbTGlDYV0NCjAwMDEg Z2V0bG9jYWxfV0NfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uLiJAMA0KMDAwMyBzZW5k ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2FsbGRhdGEhbWlkOmRlbGVnYXRl ZSwgYXJnYzowLCBGQ0FMTHxGT1JXQVJESU5HPiwgbmlsDQowMDA2IGxlYXZlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFtSZV0NCmBgYA0KDQpJbnN0cnVjdGlvbiAwMDEgcHV0cyB0 aGUgY2FsbGVyJ3MgQ0kgb24gdGhlIHN0YWNrLiAgYHNlbmRgIGlzIHRhZ2dlZCB3aXRoDQpGT1JX QVJESU5HLCBzbyBpdCByZWFkcyB0aGUgQ0kgYW5kIF9jb3BpZXNfIHRoZSBjYWxsZXJzIHN0YWNr IHRvIHRoaXMgc3RhY2s6DQoNCmBgYA0KRXhlY3V0aW5nIExpbmUgfCBDb2RlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgU3RhY2sNCi0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0NCiAgICAgICAgICAgICAgMXwg ZGVmIGRlbGVnYXRlZShhLCBiKSA9IGEgKyBiICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAg ICAgMnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDENCiAgICAgICAg ICAgICAgM3wgZGVmIGRlbGVnYXRvciguLi4pICAgICAgICAgICAgICAgICAgICB8IDINCiAgICAg ICAgICAgICAgNHwgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENJMSAo YXJnYzogMikNCiAgICAgICAgICAgLT4gNXwgICBkZWxlZ2F0ZWUoLi4uKSAgIyBDSTIgKEZPUldB UkRJTkcpICB8IGNyZWZfb3JfbWUNCiAgICAgICAgICAgICAgNnwgZW5kICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IHNwZWN2YWwNCiAgICAgICAgICAgICAgN3wgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUNCiAgICAgICAgICAgICAgOHwgZGVm IGNhbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlbGYNCiAgICAgICAgICAgICAg OXwgICBkZWxlZ2F0b3IoMSwgMikgIyBDSTEgKGFyZ2M6IDIpICAgICB8IDENCiAgICAgICAgICAg ICAxMHwgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDINCmBgYA0KDQpU aGUgIkZPUldBUkRJTkciIGNhbGwgc2l0ZSBjb21iaW5lcyBpbmZvcm1hdGlvbiBmcm9tIENJMSB3 aXRoIENJMiBpbiBvcmRlcg0KdG8gc3VwcG9ydCBwYXNzaW5nIG90aGVyIHZhbHVlcyBpbiBhZGRp dGlvbiB0byB0aGUgYC4uLmAgdmFsdWUsIGFzIHdlbGwgYXMNCnBlcmZlY3RseSBmb3J3YXJkIHNw bGF0IGFyZ3MsIGt3YXJncywgZXRjLg0KDQpTaW5jZSB3ZSdyZSBhYmxlIHRvIGNvcHkgdGhlIHN0 YWNrIGZyb20gYGNhbGxlcmAgaW4gdG8gYGRlbGVnYXRvcmAncyBzdGFjaywgd2UNCmNhbiBhdm9p ZCBhbGxvY2F0aW5nIG9iamVjdHMuDQoNCiMjIFdoeT8NCg0KSSB3YW50IHRvIGRvIHRoaXMgdG8g ZWxpbWluYXRlIG9iamVjdCBhbGxvY2F0aW9ucyBmb3IgZGVsZWdhdGUgbWV0aG9kcy4NCk15IGxv bmcgdGVybSBnb2FsIGlzIHRvIGltcGxlbWVudCBgQ2xhc3MjbmV3YCBpbiBSdWJ5IGFuZCBpdCB1 c2VzIGAuLi5gLg0KDQpJIHdhcyBhYmxlIHRvIGltcGxlbWVudCBgQ2xhc3MjbmV3YCBpbiBSdWJ5 DQpbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzkyODkpLg0KSWYgd2Ug YWRvcHQgdGhlIHRlY2huaXF1ZSBpbiB0aGlzIHBhdGNoLCB0aGVuIHdlIGNhbiBvcHRpbWl6ZSBh bGxvY2F0aW5nDQpvYmplY3RzIHRoYXQgdGFrZSBrZXl3b3JkIHBhcmFtZXRlcnMgZm9yIGBpbml0 aWFsaXplYC4NCg0KRm9yIGV4YW1wbGUsIHRoaXMgY29kZSB3aWxsIGFsbG9jYXRlIDIgb2JqZWN0 czogb25lIGZvciBgU29tZU9iamVjdGAsIGFuZCBvbmUNCmZvciB0aGUga3dhcmdzOg0KDQpgYGBy dWJ5DQpTb21lT2JqZWN0Lm5ldyhmb286IDEpDQpgYGANCg0KSWYgd2UgY29tYmluZSB0aGlzIHRl Y2huaXF1ZSwgcGx1cyBpbXBsZW1lbnQgYENsYXNzI25ld2AgaW4gUnVieSwgdGhlbiB3ZSBjYW4N CnJlZHVjZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBjb21tb24gb3BlcmF0aW9uLg0KDQoNCg0KLS0g DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29y ZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1Ynkt Y29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21s LnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvcG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5 LWxhbmcub3JnLw==