Re: MineCraft with Python
"Cabal Owen" <[email protected]> Fri, 02 Dec 2022 04:59:43 -0000
| Newsgroups | gmane.comp.python.education |
|---|---|
| Message-ID | <[email protected]> |
UHl0aG9uIHNjcmlwdHMgY2FuIGdlbmVyYXRlIG5lYXQgaW4td29ybGQgdGhpbmdzLCBhbmQgdGhl cmUgYXJlIG1hbnkgZXhhbXBsZXMgb24gdGhlIHdlYi4gV2l0aCBhIGZldyBsaW5lcyB5b3UgY2Fu IGRyYXcgYSBnaWFudCBnbGFzcyBzcGhlcmUsIGFuZCB3aXRoIGEgYml0IG1vcmUgd29yayBtYWtl IGEgZ2lhbnQgU2llcnBpbnNraSB0cmlhbmdsZSBpbiB0aGUgc2t5IGFuZCBldmVuIGltcG9ydCBv YmogZmlsZXMgbGlrZSBhIHNwYWNlIHNodXR0bGUuIEkgbXlzZWxmIG1hZGUgZnVuIHNjcmlwdHMg dG8gZHJhdyBhIHdhdGVyLWZpbGxlZCBnbGFzcyBkb251dCBhbmQgYSBnaWdhbnRpYyBLbGVpbiBi b3R0bGUsIHRvIHR1cm4gZXZlcnl0aGluZyBhcm91bmQgaW50byBUTlQgYW5kIHRvIGNvbnRyb2wg TWluZWNyYWZ0IHdpdGggeW91ciBicmFpbiB1c2luZyBhIE1pbmRGbGV4IEVFRyB0b3kuIFRoZXJl IGlzIGEgd2hvbGUgYm9vayBpbnRyb2R1Y2luZyBwcm9ncmFtbWluZyB1c2luZyBweXRob24gc2Ny aXB0cyBmb3IgTWluZWNyYWZ0LCBhbmQgeW91IGNhbiBldmVuIG1ha2Ugc2ltcGxlIE1pbmVjcmFm dC1iYXNlZCBnYW1lcy4gSSB3aWxsIGFsc28gc2hvdyBob3cgdG8gZG8gc2ltcGxlIChhbmQgc29t ZXRpbWVzIG1vcmUgZWxhYm9yYXRlKSB0dXJ0bGUtYmFzZWQgZHJhd2luZ3MgaW4gTWluZWNyYWZ0 LCB3aGlsZSB5b3UgY2FuIHJpZGUgYWxvbmcgd2l0aCB0aGUgZHJhd2luZyBhcyB0aGUgdHVydGxl Lg0KDQpGb3IgYSB3aGlsZSBub3cgeW91IGNvdWxkIHdyaXRlIHB5dGhvbiBzY3JpcHRzIGZvciBN aW5lY3JhZnQgb24gdGhlIFJhc3BiZXJyeSBQaS4gSSB3YW50ZWQgbXkga2lkcyB0byBiZSBhYmxl IHRvIGRvIHRoYXQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgUGksIHBsdXMgaXQgd291bGQgYmUgbmlj ZSB0byBkbyB0aGlzIHdpdGggdGhlIGZ1bGwgZGVza3RvcCBNaW5lY3JhZnQuIFlvdSBjb3VsZCBy dW4geW91ciBvd24gc2VydmVyIHdpdGggdGhlIFJhc3BiZXJyeSBKdWljZSBwbHVnaW4gd2hpY2gg ZW5hYmxlcyBtb3N0IG9mIHRoZSBweXRob24gc2NyaXB0cyB0byB3b3JrLiBCdXQgbm90IGV2ZXJ5 b25lIHdhbnRzIHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSBhIHNlcnZlci4NCg0KU28gSSB3cm90 ZSB0aGUgUmFzcGJlcnJ5IEphbSBNb2QgZm9yIE1pbmVjcmFmdCAxLjggKG5vdyBwb3J0ZWQgdG8g MS44LjgsIDEuOC45IGFuZCAxLjkgYXMgd2VsbCkgdGhhdCBlbXVsYXRlcyBtb3N0IG9mIHRoZSBS YXNwYmVycnkgUGkgTWluZWNyYWZ0IHByb3RvY29sIChhYm91dCB0aGUgc2FtZSBhcyB0aGUgUmFz cGJlcnJ5IEp1aWNlIHBsdWdpbiBwcm92aWRlcykgYW5kIGxldHMgUmFzcGJlcnJ5IFBpIHB5dGhv biBzY3JpcHRzIHJ1biB3aXRoIGZ1bGwgZGVza3RvcCBNaW5lY3JhZnQuIChJIGxhdGVyIGZvdW5k IG91dCB0aGF0IHNvbWVvbmUgd3JvdGUgdGhlIG1jcGlhcGkgbW9kIGZvciBNaW5lY3JhZnQgMS43 LjEwIGEgY291cGxlIG9mIHdlZWtzIGVhcmxpZXIuKSBJIHdyb3RlIHRoaXMgSW5zdHJ1Y3RhYmxl IGluaXRpYWxseSBmb3IgUHl0aG9uIDIuNywgYnV0IEkgdGhpbmsgbW9zdCBvZiBteSBzYW1wbGVz IHdpbGwgd29yayBmb3IgMy54Lg0KDQpJIGFzc3VtZSB0aGF0IHlvdSBoYXZlIGJhc2ljIGZhY2ls aXR5IHdpdGggY3JlYXRpbmcgZm9sZGVycyBhbmQgZG93bmxvYWRpbmcsIHVuemlwcGluZywgYW5k IGNvcHlpbmcgZmlsZXMgb24gV2luZG93cyAob3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtIG9mIGNo b2ljZSkuDQoNCllvdSBjYW4gY3JlYXRlIFB5dGhvbiBzY3JpcHRzIGZvciBNaW5lY3JhZnQgd2l0 aCBhIHRleHQgZWRpdG9yLCB0aGUgSURMRSBlbnZpcm9ubWVudCB3aGljaCBjb21lcyB3aXRoIFB5 dGhvbiwgb3Igd2l0aCBWaXN1YWwgU3R1ZGlvIFB5dGhvbiBUb29scyBvbiBXaW5kb3dzLiBUaGUg bGFzdCBpcyBhY3R1YWxseSB0aGUgbmljZXN0IGluIHNvbWUgd2F5cywgc28gSSdsbCBoYXZlIHNv bWUgb3B0aW9uYWwgc3RlcHMgb24gaG93IHRvIGRvIHRoYXQuDQoNClRoaXMgc3VtbWVyIEkgcGxh biB0byB0ZWFjaCBjb2RpbmcgYW5kIGJhc2ljIDNEIGdlb21ldHJ5IHRvIGdpZnRlZCBtaWRkbGUt IGFuZCBoaWdoLXNjaG9vbGVycyB1c2luZyBNaW5lY3JhZnQsIFJhc3BiZXJyeSBKYW0gTW9kLCBQ eXRob24gYW5kIFZpc3VhbCBTdHVkaW8uDQoNCklmIHlvdSB3YW50IHRvIGRvIHRoaXMgd2l0aCBN aW5lY3JhZnQgUG9ja2V0IEVkaXRpb24gb24gQW5kcm9pZCBpbnN0ZWFkLCBJIGhhdmUgYW4gSW5z dHJ1Y3RhYmxlIGZvciB0aGF0LCB0b28uDQoNClN0ZXAgMS4gTW9kdWxlcyBhbmQgbGlicmFyaWVz IGZvciBNYWtlIE1pbmVjcmFmdCBpbiBQeXRob24NClRvIG1ha2UgdGhpcyBNaW5lY3JhZnQgZ2Ft ZSBpbiBQeXRob24sIHdlIHdpbGwgdXRpbGl6ZSB0aGUgdXJzaW5hIFB5dGhvbiBtb2R1bGUuIEl0 IGlzIGEgUHl0aG9uIGNyb3NzLXBsYXRmb3JtIGdhbWUgY3JlYXRpb24gcGFja2FnZSBzaW1pbGFy IHRvIFB5R2FtZS4NCg0KVG8gaW5zdGFsbCB0aGlzIGxpYnJhcnksIHN0YXJ0IGEgdGVybWluYWwg b3IgY29tbWFuZCBwcm9tcHQgaW4gdGhlIHByb2plY3QgZm9sZGVyIGFuZCBwYXN0ZSB0aGUgZm9s bG93aW5nIGNvbW1hbmQuDQoNCnBpcCBpbnN0YWxsIHVyc2luYQ0KU3RlcCAyLiBpbXBvcnRpbmcg bGlicmFyeQ0KSW1wb3J0IHRoZSBVcnNpbmEgRW5naW5lIGFuZCBhbGwgdGhlIFRleHR1cmVzIHRo YXQgd2Ugd2lsbCByZXF1aXJlIGluIHRoZSBmdXR1cmUuDQoNCmZyb20gdXJzaW5hIGltcG9ydCAq DQpmcm9tIHVyc2luYS5wcmVmYWJzLmZpcnN0X3BlcnNvbl9jb250cm9sbGVyIGltcG9ydCBGaXJz dFBlcnNvbkNvbnRyb2xsZXINCmFwcCA9IFVyc2luYSgpDQpncmFzc190ZXh0dXJlID0gbG9hZF90 ZXh0dXJlKCdhc3NldHMvZ3Jhc3NfYmxvY2sucG5nJykNCnN0b25lX3RleHR1cmUgPSBsb2FkX3Rl eHR1cmUoJ2Fzc2V0cy9zdG9uZV9ibG9jay5wbmcnKQ0KYnJpY2tfdGV4dHVyZSA9IGxvYWRfdGV4 dHVyZSgnYXNzZXRzL2JyaWNrX2Jsb2NrLnBuZycpDQpkaXJ0X3RleHR1cmUgID0gbG9hZF90ZXh0 dXJlKCdhc3NldHMvZGlydF9ibG9jay5wbmcnKQ0Kc2t5X3RleHR1cmUgICA9IGxvYWRfdGV4dHVy ZSgnYXNzZXRzL3NreWJveC5wbmcnKQ0KYXJtX3RleHR1cmUgICA9IGxvYWRfdGV4dHVyZSgnYXNz ZXRzL2FybV90ZXh0dXJlLnBuZycpDQpwdW5jaF9zb3VuZCAgID0gQXVkaW8oJ2Fzc2V0cy9wdW5j aF9zb3VuZCcsbG9vcCA9IEZhbHNlLCBhdXRvcGxheSA9IEZhbHNlKQ0KYmxvY2tfcGljayA9IDEN ClRvIGxvYWQgdGhlIHRleHR1cmVzIGFuZCBibG9jayB5b3UgbmVlZCB0byBkb3dubG9hZCB0aGUg QXNzZXRzIGZvbGRlciBhbmQgcGFzdGUgaXQgd2hlcmUgeW91ciBNaW5lY3JhZnQgY29kZSBQeXRo b24gZmlsZSBpcyBzdG9yZWQuDQoNCk5vdyB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzIHdlIG5lZWQg dG8gZG8gdG8gbWFrZSB0aGlzIGFsbCB3b3JrLCBhbmQgbGV04oCZcyBzdGFydCBieSBtYWtpbmcg YWN0dWFsIGN1YmVzIHRoYXQgd2UgY2FuIHV0aWxpemUuIFRoaXMgd2lsbCBiZSB0aGUgbW9zdCBz aWduaWZpY2FudCBtb2RpZmljYXRpb24gdGhhdCB3ZSBjYW4gZG8uIEl0IHdvdWxkIGFwcGVhciBh cHByb3ByaWF0ZSBpZiB3ZSBhcHBsaWVkIGEgbW9yZSBhcHByb3ByaWF0ZSB0ZXh0dXJlIHRvIGl0 LiBUbyBkbyB0aGF0IHdlIGNyZWF0ZWQgYSBjb3VwbGUgb2YgdGV4dHVyZXMuDQoNClN0ZXAgMy4g TWFraW5nIFZveGVsKEN1YmVzKSBmb3IgTWluZWNyYWZ0IGluIFB5dGhvbg0KY2xhc3MgVm94ZWwo QnV0dG9uKToNCglkZWYgX19pbml0X18oc2VsZiwgcG9zaXRpb24gPSAoMCwwLDApLCB0ZXh0dXJl ID0gZ3Jhc3NfdGV4dHVyZSk6DQoJCXN1cGVyKCkuX19pbml0X18oDQoJCQlwYXJlbnQgPSBzY2Vu ZSwNCgkJCXBvc2l0aW9uID0gcG9zaXRpb24sDQoJCQltb2RlbCA9ICdhc3NldHMvYmxvY2snLA0K CQkJb3JpZ2luX3kgPSAwLjUsDQoJCQl0ZXh0dXJlID0gdGV4dHVyZSwNCgkJCWNvbG9yID0gY29s b3IuY29sb3IoMCwwLHJhbmRvbS51bmlmb3JtKDAuOSwxKSksDQoJCQlzY2FsZSA9IDAuNSkNClRo ZSB0aGlyZCBzdGVwIGlzIHRvIGJ1aWxkIGEgbmV3IGNsYXNzIGZvciBlYWNoIHZveGVsIHRoYXQg d2Ugd2FudCB0byBjb25zdHJ1Y3QsIHRoZXJlZm9yZSB0aGUgY2xhc3MgbmFtZSB3aWxsIGJlIHZv eGVsLiBBbmQgaXQgZGVyaXZlcyBmcm9tIHRoZSBidXR0b24gY2xhc3MuIFRoZSBiYXNpYyBleHBs YW5hdGlvbiBpcyB0aGF0IGFueXRpbWUgSSBjbGljayBvbiBhIHZveGVsLCBJIHdhbnQgdG8gbWFr ZSBhbm90aGVyIHZveGVsIGp1c3QgYWRqYWNlbnQgdG8gaXQuIFNvIEkgbmVlZCB0byBrbm93IHdo ZXJlIGVhY2ggdm94ZWwgaXMgaW4gcmVsYXRpb24gdG8gd2hpY2ggYnV0dG9uLiBBbmQgaW4gaGVy ZSwgd2UgbmVlZCBvdXIgaW5pdCBtZXRob2QgYWdhaW4gYW5kIG5vdGhpbmcgZWxzZSBmb3IgdGhl IHRpbWUgYmVpbmcsIGFuZCB3ZSBhbHNvIG5lZWQgdGhlIHN1cGVyIG1ldGhvZCB3aXRoIGFuIHVu ZGVyc2NvcmUgdG8gaW5pdC4gQW5kIG5vdyB3ZSBtdXN0IHN1cHBseSBhIGZldyBwYXJhbWV0ZXJz LCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMgcGFyZW50LCBhcyBzaG93biBhYm92ZS4NCg0KVGhlIG5l eHQgc3RhZ2Ugd291bGQgYmUgdG8gZmluZCBhIHBvc2l0aW9uLCBhbmQgdGhlIGN1cnJlbnQgc3Rh dHVzIGlzICgwLDApLiBOZXh0LCBJ4oCZZCB3YW50IHRvIG1ha2UgYSBtb2RlbCBvZiB3aGF0IHRo ZSBvYmplY3Qgd291bGQgbG9vayBsaWtlLiBBbmQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIG9u ZSB3aWxsIGJlIGEgY3ViZSAocGFyYW1ldGVycyksIGJ1dCB3ZSBtYXkgdXNlIGRpZmZlcmVudCBm b3Jtcy4gVGhlIG5leHQgc3RlcCBpcyB0byBwYXNzIG9yaWdpbl95IHNvIHRoYXQgdGhlIGhlaWdo dCBhbmQgM0Qgc3BhY2Ugb2YgdGhpcyBjdWJlIGFyZSBlZmZlY3RpdmVseSAoMC41KSwgYW5kIHRo ZSBmaW5hbCBhbmQgbW9zdCBjcnVjaWFsIGl0ZW0gaXMgdGV4dHVyZSBhbmQgY29sb3IuIEFuZCBi b3RoIG9mIHRoZXNlIHRoaW5ncyBtdWx0aXBsaWVkLg0KDQpTdGVwIDQuIE1ha2luZyBNaW5lY3Jh ZnQgQXJlbmENCmZvciB6IGluIHJhbmdlKDIwKToNCglmb3IgeCBpbiByYW5nZSgyMCk6DQoJCXZv eGVsID0gVm94ZWwocG9zaXRpb24gPSAoeCwwLHopKQ0KTm93IHRoYXQgd2UgaGF2ZSBldmVyeXRo aW5nLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGJ1dHRvbiBmb3IgaXQuIFRoZSBjdWJl4oCZcyBjdXJy ZW50IHBvc2l0aW9ucyBhcmUgeCwgeSwgYW5kIHouICgwLDAsMCkuIFRvIGNyZWF0ZSBpbmRpdmlk dWFsIHZveGVscywgd2UgbXVzdCBmaXJzdCBjcmVhdGUgYSBmb3IgbG9vcCBpbiB3aGljaCB0aGUg dm94ZWwgaXMgc2V0LiBBbmQgaWYgeW91IG5lZWQgdG8gbWFrZSBpdCBiaWdnZXIsIGluY3JlYXNl IDM1IGJ5IDM1LiBPbmUgb2YgdGhlIGN1cnJlbnQgaXNzdWVzIHdpdGggdGhpcyBnYW1lIGlzIHRo YXQgaWYgeW91IGFkZCB0b28gbWFueSBvZiB0aGVzZSBmaWVsZHMsIHRoZSBnYW1lIG1heSBzbG93 IGRvd24uIEFzIGEgcmVzdWx0LCB0aGVyZSB3b3VsZCBiZSBhIHNpZ25pZmljYW50IGFtb3VudCBv ZiBvcHRpbWl6YXRpb24gd29yayB0byBiZSBkb25lLg0KDQpTdGVwIDUuIENyZWF0aW5nIEZpcnN0 IHBlcnNvbiBDb250cm9sbGVyKEZQQykNCmZyb20gdXJzaW5hLnByZWZhYnMuZmlyc3RfcGVyc29u X2NvbnRyb2xsZXIgaW1wb3J0IEZpcnN0UGVyc29uQ29udHJvbGxlcg0KcGxheWVyID0gRmlyc3RQ ZXJzb25Db250cm9sbGVyKCkNClRoZSBxdWVzdGlvbiBpcyBob3cgd2UgY2FuIGRldmVsb3AgYSBm aXJzdC1wZXJzb24gY2hhcmFjdGVyIGluIGFsbCBvZiB0aGlzLiBhbmQgdXJzaW5hIG1ha2VzIHRo aXMgc3VwZXIgc2ltcGxlLiBCZWNhdXNlIGl0IGNvbWVzIHdpdGggYSBudW1iZXIgb2YgcHJlc2V0 IGNsYXNzZXMgdGhhdCB3ZSBtYXkgdXRpbGl6ZSB0byBjb25zdHJ1Y3QgYSBmaXJzdC1wZXJzb24g Y2hhcmFjdGVyLiBXZSBkb27igJl0IHJlYWxseSBoYXZlIHRvIGRvIGFueXRoaW5nIGFib3V0IGl0 LiBBbmQgcmVhbGx5LCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBpbXBvcnQgc29tZXRoaW5nIGVsc2Ug Zmlyc3QsIHdoaWNoIGlzIGZyb20gdXJzaW5hLiBwcmVmYWJzLmZpcnN0X3BlcnNvbl8gY29udHJv bGxlci4gVGhpcyBpcyBub3QgYnkgZGVmYXVsdCBpbXBvcnRlZCBpbnRvIE9jZWFuYSwgc28gd2Ug aGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMsIGJ1dCBvbmNlIHdlIGRvIGl0LCBhbGwgd2UgaGF2ZSB0 byBkbyB0byBjcmVhdGUgRlBDIChGaXJzdCBQZXJzb24gQ2hhcmFjdGVyKSBpcyB0byBjcmVhdGUg YSBuZXcgdmFyaWFibGUgd2hlcmUgd2Ugc3RvcmUgYW5kIHRoZW4gY2FsbCBGUEMuDQoNClN0ZXAg Ni4gTWFraW5nIEludGVyYWN0aXZlIFVJIGZvciBNaW5lY3JhZnQgUHl0aG9uIEVkaXRpb24NCmRl ZiBpbnB1dChzZWxmLGtleSk6DQoJaWYgc2VsZi5ob3ZlcmVkOg0KCQlpZiBrZXkgPT0gJ2xlZnQg bW91c2UgZG93bic6DQoJCQlwdW5jaF9zb3VuZC5wbGF5KCkNCgkJCWlmIGJsb2NrX3BpY2sgPT0g MTogdm94ZWwgPSBWb3hlbChwb3NpdGlvbiA9IHNlbGYucG9zaXRpb24gKyBtb3VzZS5ub3JtYWws IHRleHR1cmUgPSBncmFzc190ZXh0dXJlKQ0KCQkJaWYgYmxvY2tfcGljayA9PSAyOiB2b3hlbCA9 IFZveGVsKHBvc2l0aW9uID0gc2VsZi5wb3NpdGlvbiArIG1vdXNlLm5vcm1hbCwgdGV4dHVyZSA9 IHN0b25lX3RleHR1cmUpDQoJCQlpZiBibG9ja19waWNrID09IDM6IHZveGVsID0gVm94ZWwocG9z aXRpb24gPSBzZWxmLnBvc2l0aW9uICsgbW91c2Uubm9ybWFsLCB0ZXh0dXJlID0gYnJpY2tfdGV4 dHVyZSkNCgkJCWlmIGJsb2NrX3BpY2sgPT0gNDogdm94ZWwgPSBWb3hlbChwb3NpdGlvbiA9IHNl bGYucG9zaXRpb24gKyBtb3VzZS5ub3JtYWwsIHRleHR1cmUgPSBkaXJ0X3RleHR1cmUpDQoJCQlp ZiBrZXkgPT0gJ3JpZ2h0IG1vdXNlIGRvd24nOg0KCQkJCXB1bmNoX3NvdW5kLnBsYXkoKQ0KCQkJ CWRlc3Ryb3koc2VsZikNCldoYXQgd2UgbmVlZCB0byBmaW5kIG91dCBub3cgaXMgaG93IHRvIG1h a2UgdGhpcyBhbGwgbW9yZSBpbnRlcmFjdGl2ZS4gV2UgbXVzdCBhbHNvIGNyZWF0ZSBhbmQgZGVz dHJveSBibG9ja3MsIHdoaWNoIHdpbGwgYmUgcmVhbGx5IHNpbXBsZS4gQmVjYXVzZSB3aGF0IHdl IHdhbnQgdG8gYWNjb21wbGlzaCBpcywgd2hlbiB5b3UgcHVzaCB0aGUgdm94ZWwgYnV0dG9uLCB3 ZSB3YW50IHRvIGNvbnN0cnVjdCBhIG5ldyBibG9jayBhdCB0aGF0IGxvY2F0aW9uLiBXZSBkZXZl bG9wIGFuIGlucHV0IGZ1bmN0aW9uIHRvIGRvIHRoaXMuIE1ha2Ugc29tZSB0cmFuc21pc3Npb25z IGFzIHdlbGwuIEFuZCB0aGVuIG1ha2UgYSB0byBjaGFuZ2Ugdm94ZWwgZm9yIHZveGVsIHRleHR1 cmUNCg0KU3RlcCA3LiBDaGFuZ2luZyBEaWZmZXJlbnQgVGV4dHVyZXMgZm9yIENvZGluZyBNaW5l Y3JhZnQgaW4gUHl0aG9uDQpkZWYgdXBkYXRlKCk6DQoJZ2xvYmFsIGJsb2NrX3BpY2sNCg0KCWlm IGhlbGRfa2V5c1snbGVmdCBtb3VzZSddIG9yIGhlbGRfa2V5c1sncmlnaHQgbW91c2UnXToNCgkJ aGFuZC5hY3RpdmUoKQ0KCWVsc2U6DQoJCWhhbmQucGFzc2l2ZSgpDQoNCglpZiBoZWxkX2tleXNb JzEnXTogYmxvY2tfcGljayA9IDENCglpZiBoZWxkX2tleXNbJzInXTogYmxvY2tfcGljayA9IDIN CglpZiBoZWxkX2tleXNbJzMnXTogYmxvY2tfcGljayA9IDMNCglpZiBoZWxkX2tleXNbJzQnXTog YmxvY2tfcGljayA9IDQNClRvIG1ha2UgTWluZWNyYWZ0IHdpdGggcHl0aG9uLCB3ZSBuZWVkIHRv IGNoYW5nZSB0aGUgY3ViZSB0ZXh0dXJlLCBhbmQgZm9yIGNoYW5naW5nIHRoZSBjdWJlIHRleHR1 cmUgaGVyZSB3ZSBjcmVhdGVkIGEgbG9vcCBieSBjbGlja2luZyBvbmUgdG8gZm91ciBrZXlzIHRv IGFsdGVyIHRoZSB2b3hlbCB0ZXh0dXJlIGJ5IExlZnQgY2xpY2sgYW5kIGRlc3Ryb3lpbmcgaXQg d2l0aCB0aGUgcmlnaHQga2V5LiBJbiBzaW1wbGUgd29yZHMuIElmIHdlIHByZXNzIGFueSBvZiB0 aGVzZSBidXR0b25zIHRoaXMgYmxvY2sgcGljayBnZXRzIGEgZGlmZmVyZW50IG51bWJlci4NCg0K U3RlcCA4LiBDcmVhdGluZyB0aGUgU2t5DQpjbGFzcyBTa3koRW50aXR5KToNCglkZWYgX19pbml0 X18oc2VsZik6DQoJCXN1cGVyKCkuX19pbml0X18oDQoJCQlwYXJlbnQgPSBzY2VuZSwNCgkJCW1v ZGVsID0gJ3NwaGVyZScsDQoJCQl0ZXh0dXJlID0gc2t5X3RleHR1cmUsDQoJCQlzY2FsZSA9IDE1 MCwNCgkJCWRvdWJsZV9zaWRlZCA9IFRydWUpDQpUaGVyZSBhcmUgdGhyZWUgb3RoZXIgY29tcG9u ZW50cyB0aGF0IGNhbiBzaWduaWZpY2FudGx5IGhlbHAgdG8gY29udmV5IHRoZSBnYW1lLiBUaGUg Zmlyc3QgaXMgYSBTa3kgQm94LCB0aGUgc2Vjb25kIGlzIGEgSGFuZCwgYW5kIHRoZSB0aGlyZCBp cyBub2lzZXMuIEFuZCBsZXQgdXMgdGFrZSB0aGVtIG9uZSBzdGVwIGF0IGEgdGltZSBpbiBNaW5l Y3JhZnQgY29kaW5nIFB5dGhvbi4gVGhlIGZpcnN0IGlzIGEgc2t5Ym94LCB3aGljaCB3ZSBlbXVs YXRlZCBpbiBvdXIgZ2FtZSBieSBjcmVhdGluZyBhIGh1Z2Ugc3BoZXJlIHdpdGggYSBza3kgdGV4 dHVyZS4gVG8gZG8gdGhpcywgd2Ugd2lsbCBjb25zdHJ1Y3QgYSBuZXcgY2xhc3MgbmFtZWQgU2t5 Lg0KDQpTdGVwIDkuIE1ha2UgYW4gRlBDIEhhbmQNCmNsYXNzIEhhbmQoRW50aXR5KToNCglkZWYg X19pbml0X18oc2VsZik6DQoJCXN1cGVyKCkuX19pbml0X18oDQoJCQlwYXJlbnQgPSBjYW1lcmEu dWksICMgVGhpcyAzRCBzcGFjZSBmb3IgT3VyIFVJIGFuZCAyRCBzcGFjZSBmb3Igb3VyIGNhbWVy YQ0KCQkJbW9kZWwgPSAnYXNzZXRzL2FybScsDQoJCQl0ZXh0dXJlID0gYXJtX3RleHR1cmUsDQoJ CQlzY2FsZSA9IDAuMiwNCgkJCXJvdGF0aW9uID0gVmVjMygxNTAsLTEwLDApLCAjdmVjMyBpcyBy ZXByZXNlbnQgM0Qgc3BhY2UgYW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBmb3IgcG9zaXRpb24oeCx5 LHopDQoJCQlwb3NpdGlvbiA9IFZlYzIoMC40LC0wLjYpKSAjdmVjMiBpcyByZXByZXNlbnQgMkQg c3BhY2UgYW5kIHRoZSBwYXJhbWV0ZXJzIGFyZSBmb3IgcG9zaXRpb24oeCx5LHopDQoNCglkZWYg YWN0aXZlKHNlbGYpOg0KCQlzZWxmLnBvc2l0aW9uID0gVmVjMigwLjMsLTAuNSkNCg0KCWRlZiBw YXNzaXZlKHNlbGYpOg0KCQlzZWxmLnBvc2l0aW9uID0gVmVjMigwLjQsLTAuNikNCk5vdyB0aGUg bmV4dCB0aGluZyB3ZSB3aWxsIGdvaW5nIHRvIG5lZWQgaXMgYSBoYW5kIGFuZCB0aGlzIG9uZSBp cyBwdXJlbHkgZGVjb3JhdGl2ZS4gQmFzaWNhbGx5IEkgaGF2ZSB1c2VkIHNvbWUgdHlwZXMgb2Yg dmFyaWFibGVzIHdoaWxlIHdvcmtpbmcgb24gaHR0cHM6Ly9lbnRlcnByaXNlLmFmZmxlLmNvbS9t b2JpbGUtYXBwLWRldmVsb3BtZW50IC4gSXQgZG9lcyBub3QgZG8gYW55dGhpbmcgYmVzaWRlcyBz aW11bGF0aW5nIGhhdmluZyBhIGhhbmQgaXTigJlzIGEgc3RyYWlnaHRmb3J3YXJkIHRoaW5nIGJ5 IGNyZWF0aW5nIGEgY2xhc3MgY2FsbGVkIGhhbmQsIHRoaXMgb25lIGlzIGFsc28gZ29pbmcgdG8g YmUgYW4gZW50aXR5Lg0KDQpDb21wbGV0ZSBjb2RlIG9mIE1pbmVjcmFmdCBpbiBQeXRob24gLQ0K ZnJvbSB1cnNpbmEgaW1wb3J0ICoNCmZyb20gdXJzaW5hLnByZWZhYnMuZmlyc3RfcGVyc29uX2Nv bnRyb2xsZXIgaW1wb3J0IEZpcnN0UGVyc29uQ29udHJvbGxlcg0KDQphcHAgPSBVcnNpbmEoKQ0K Z3Jhc3NfdGV4dHVyZSA9IGxvYWRfdGV4dHVyZSgnYXNzZXRzL2dyYXNzX2Jsb2NrLnBuZycpDQpz dG9uZV90ZXh0dXJlID0gbG9hZF90ZXh0dXJlKCdhc3NldHMvc3RvbmVfYmxvY2sucG5nJykNCmJy aWNrX3RleHR1cmUgPSBsb2FkX3RleHR1cmUoJ2Fzc2V0cy9icmlja19ibG9jay5wbmcnKQ0KZGly dF90ZXh0dXJlICA9IGxvYWRfdGV4dHVyZSgnYXNzZXRzL2RpcnRfYmxvY2sucG5nJykNCnNreV90 ZXh0dXJlICAgPSBsb2FkX3RleHR1cmUoJ2Fzc2V0cy9za3lib3gucG5nJykNCmFybV90ZXh0dXJl ICAgPSBsb2FkX3RleHR1cmUoJ2Fzc2V0cy9hcm1fdGV4dHVyZS5wbmcnKQ0KcHVuY2hfc291bmQg ICA9IEF1ZGlvKCdhc3NldHMvcHVuY2hfc291bmQnLGxvb3AgPSBGYWxzZSwgYXV0b3BsYXkgPSBG YWxzZSkNCmJsb2NrX3BpY2sgPSAxDQoNCndpbmRvdy5mcHNfY291bnRlci5lbmFibGVkID0gRmFs c2UgI1RvIERpc2FibGUgdGhlIEZQUyBDb3VudGVyIA0Kd2luZG93LmV4aXRfYnV0dG9uLnZpc2li bGUgPSBGYWxzZSAjVG8gUmVtb3ZlIHRoZSBleGl0KGNsb3NlKSBCdXR0b24NCg0KZGVmIHVwZGF0 ZSgpOg0KCWdsb2JhbCBibG9ja19waWNrDQoNCglpZiBoZWxkX2tleXNbJ2xlZnQgbW91c2UnXSBv ciBoZWxkX2tleXNbJ3JpZ2h0IG1vdXNlJ106DQoJCWhhbmQuYWN0aXZlKCkNCgllbHNlOg0KCQlo YW5kLnBhc3NpdmUoKQ0KDQoJaWYgaGVsZF9rZXlzWycxJ106IGJsb2NrX3BpY2sgPSAxDQoJaWYg aGVsZF9rZXlzWycyJ106IGJsb2NrX3BpY2sgPSAyDQoJaWYgaGVsZF9rZXlzWyczJ106IGJsb2Nr X3BpY2sgPSAzDQoJaWYgaGVsZF9rZXlzWyc0J106IGJsb2NrX3BpY2sgPSA0DQoNCmNsYXNzIFZv eGVsKEJ1dHRvbik6DQoJZGVmIF9faW5pdF9fKHNlbGYsIHBvc2l0aW9uID0gKDAsMCwwKSwgdGV4 dHVyZSA9IGdyYXNzX3RleHR1cmUpOg0KCQlzdXBlcigpLl9faW5pdF9fKA0KCQkJcGFyZW50ID0g c2NlbmUsDQoJCQlwb3NpdGlvbiA9IHBvc2l0aW9uLA0KCQkJbW9kZWwgPSAnYXNzZXRzL2Jsb2Nr JywNCgkJCW9yaWdpbl95ID0gMC41LA0KCQkJdGV4dHVyZSA9IHRleHR1cmUsDQoJCQljb2xvciA9 IGNvbG9yLmNvbG9yKDAsMCxyYW5kb20udW5pZm9ybSgwLjksMSkpLA0KCQkJc2NhbGUgPSAwLjUp DQoNCglkZWYgaW5wdXQoc2VsZixrZXkpOg0KCQlpZiBzZWxmLmhvdmVyZWQ6DQoJCQlpZiBrZXkg PT0gJ2xlZnQgbW91c2UgZG93bic6DQoJCQkJcHVuY2hfc291bmQucGxheSgpDQoJCQkJaWYgYmxv Y2tfcGljayA9PSAxOiB2b3hlbCA9IFZveGVsKHBvc2l0aW9uID0gc2VsZi5wb3NpdGlvbiArIG1v dXNlLm5vcm1hbCwgdGV4dHVyZSA9IGdyYXNzX3RleHR1cmUpDQoJCQkJaWYgYmxvY2tfcGljayA9 PSAyOiB2b3hlbCA9IFZveGVsKHBvc2l0aW9uID0gc2VsZi5wb3NpdGlvbiArIG1vdXNlLm5vcm1h bCwgdGV4dHVyZSA9IHN0b25lX3RleHR1cmUpDQoJCQkJaWYgYmxvY2tfcGljayA9PSAzOiB2b3hl bCA9IFZveGVsKHBvc2l0aW9uID0gc2VsZi5wb3NpdGlvbiArIG1vdXNlLm5vcm1hbCwgdGV4dHVy ZSA9IGJyaWNrX3RleHR1cmUpDQoJCQkJaWYgYmxvY2tfcGljayA9PSA0OiB2b3hlbCA9IFZveGVs KHBvc2l0aW9uID0gc2VsZi5wb3NpdGlvbiArIG1vdXNlLm5vcm1hbCwgdGV4dHVyZSA9IGRpcnRf dGV4dHVyZSkNCg0KCQkJaWYga2V5ID09ICdyaWdodCBtb3VzZSBkb3duJzoNCgkJCQlwdW5jaF9z b3VuZC5wbGF5KCkNCgkJCQlkZXN0cm95KHNlbGYpDQoNCmNsYXNzIFNreShFbnRpdHkpOg0KCWRl ZiBfX2luaXRfXyhzZWxmKToNCgkJc3VwZXIoKS5fX2luaXRfXygNCgkJCXBhcmVudCA9IHNjZW5l LA0KCQkJbW9kZWwgPSAnc3BoZXJlJywNCgkJCXRleHR1cmUgPSBza3lfdGV4dHVyZSwNCgkJCXNj YWxlID0gMTUwLA0KCQkJZG91YmxlX3NpZGVkID0gVHJ1ZSkNCg0KY2xhc3MgSGFuZChFbnRpdHkp Og0KCWRlZiBfX2luaXRfXyhzZWxmKToNCgkJc3VwZXIoKS5fX2luaXRfXygNCgkJCXBhcmVudCA9 IGNhbWVyYS51aSwNCgkJCW1vZGVsID0gJ2Fzc2V0cy9hcm0nLA0KCQkJdGV4dHVyZSA9IGFybV90 ZXh0dXJlLA0KCQkJc2NhbGUgPSAwLjIsDQoJCQlyb3RhdGlvbiA9IFZlYzMoMTUwLC0xMCwwKSwN CgkJCXBvc2l0aW9uID0gVmVjMigwLjQsLTAuNikpDQoNCglkZWYgYWN0aXZlKHNlbGYpOg0KCQlz ZWxmLnBvc2l0aW9uID0gVmVjMigwLjMsLTAuNSkNCg0KCWRlZiBwYXNzaXZlKHNlbGYpOg0KCQlz ZWxmLnBvc2l0aW9uID0gVmVjMigwLjQsLTAuNikNCg0KZm9yIHogaW4gcmFuZ2UoMjApOg0KCWZv ciB4IGluIHJhbmdlKDIwKTogDQoJCXZveGVsID0gVm94ZWwocG9zaXRpb24gPSAoeCwwLHopKQ0K DQpwbGF5ZXIgPSBGaXJzdFBlcnNvbkNvbnRyb2xsZXIoKQ0Kc2t5ID0gU2t5KCkNCmhhbmQgPSBI YW5kKCkNCg0KYXBwLnJ1bigpDQoNCkhvcGUgaXQgd2lsbCBoZWxwIGV2ZXJ5b25lLg0KX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRWR1LXNpZyBtYWlsaW5n IGxpc3QgLS0gZWR1LXNpZ0BweXRob24ub3JnClRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwg dG8gZWR1LXNpZy1sZWF2ZUBweXRob24ub3JnCmh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxt YW4zL2xpc3RzL2VkdS1zaWcucHl0aG9uLm9yZy8KTWVtYmVyIGFkZHJlc3M6IHB5dGhvbi1lZHUt c2lnQG0uZ21hbmUtbXgub3JnCg==