From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Leonard Subject: [PATCH ARM v6 07/14] mini-os: arm: boot code Date: Wed, 16 Jul 2014 12:07:47 +0100 Message-ID: <1405508874-3921-8-git-send-email-talex5@gmail.com> References: <1405508874-3921-1-git-send-email-talex5@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1X7N4C-0003JK-38 for xen-devel@lists.xenproject.org; Wed, 16 Jul 2014 11:08:08 +0000 Received: by mail-wi0-f181.google.com with SMTP id bs8so1101006wib.8 for ; Wed, 16 Jul 2014 04:08:04 -0700 (PDT) In-Reply-To: <1405508874-3921-1-git-send-email-talex5@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Thomas Leonard , Dave.Scott@eu.citrix.com, anil@recoil.org, stefano.stabellini@eu.citrix.com, samuel.thibault@ens-lyon.org List-Id: xen-devel@lists.xenproject.org QmFzZWQgb24gYW4gaW5pdGlhbCBwYXRjaCBieSBLYXJpbSBSYXNsYW4uCgpTaWduZWQtb2ZmLWJ5 OiBLYXJpbSBBbGxhaCBBaG1lZCA8a2FyaW0uYWxsYWguYWhtZWRAZ21haWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBUaG9tYXMgTGVvbmFyZCA8dGFsZXg1QGdtYWlsLmNvbT4KCi0tLQoKQ2hhbmdlcyBz aW5jZSB2NToKCi0gTW92ZWQgU1ZDIHN0YWNrIHRvIGZpcnN0IDE2S0Igb2YgUkFNIChwcm92aWRl cyBzb21lIHByb3RlY3Rpb24gYWdhaW5zdAogIHN0YWNrIG92ZXJsb3cgY29ycnVwdGluZyBtZW1v cnkpLgotIFB1dCB0cmFuc2xhdGlvbiB0YWJsZSBpbiBzZWNvbmQgMTZLQiAoc2ltcGxpZmllcyBi b290IGNvZGUpLgotIE1vdmVkIGRlZmluaXRpb24gb2YgcGh5c2ljYWxfYWRkcmVzc19vZmZzZXQg b3V0IG9mIGFzbS4KLSBNb3ZlZCBzaGFyZWRfaW5mb19wYWdlIGFuZCBpcnFzdGFjayB0byAuYnNz IHNlY3Rpb24gKHNtYWxsZXIgaW1hZ2UpLgotIE1vdmVkIF9fYnNzX3N0YXJ0IGFuZCBfZWRhdGEg aW5zaWRlIHNlY3Rpb24gaW4gbGlua2VyIHNjcmlwdC4KICBUaGUgbGlua2VyIGFkZHMgbm9uLWxp c3RlZCBzZWN0aW9ucywgc3VjaCBhcyAuZ290LCBqdXN0IGJlZm9yZSAuYnNzLgogIFRoaXMgbWVh bnQgdGhhdCB3ZSBhY2NpZGVudGFsbHkgemVyb2VkIHRob3NlIG91dCB0b28uCi0gRW5hYmxlIGZs b2F0aW5nIHBvaW50IHVuaXQgZHVyaW5nIGJvb3QuCgpBZGRyZXNzZWQgSnVsaWVuIEdyYWxsJ3Mg Y29tbWVudHM6Ci0gR2V0IGh5cGVyY2FsbCBudW1iZXJzIGZyb20geGVuLmguCi0gQXZvaWQgZHVw bGljYXRpbmcgdGhlIGRlZmluaXRpb24gb2YgX3N0YXJ0J3MgdmlydHVhbCBhZGRyZXNzLgotLS0K IGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2FybTMyLlMgICAgICAgICAgfCAyMTEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vaHlwZXJjYWxs czMyLlMgICB8ICA2NCArKysrKysrKysrCiBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9taW5pb3Mt YXJtMzIubGRzIHwgIDc5ICsrKysrKysrKysrKwogZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vc2V0 dXAuYyAgICAgICAgICB8IDExOSArKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0 NzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dHJhcy9taW5pLW9zL2FyY2gv YXJtL2FybTMyLlMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9o eXBlcmNhbGxzMzIuUwogY3JlYXRlIG1vZGUgMTAwNzU1IGV4dHJhcy9taW5pLW9zL2FyY2gvYXJt L21pbmlvcy1hcm0zMi5sZHMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHRyYXMvbWluaS1vcy9hcmNo L2FybS9zZXR1cC5jCgpkaWZmIC0tZ2l0IGEvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vYXJtMzIu UyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2FybTMyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uODhlZmUyNAotLS0gL2Rldi9udWxsCisrKyBiL2V4dHJhcy9taW5pLW9z L2FyY2gvYXJtL2FybTMyLlMKQEAgLTAsMCArMSwyMTEgQEAKK0AgT2Zmc2V0IG9mIHRoZSBrZXJu ZWwgd2l0aGluIHRoZSBSQU0uIFRoaXMgaXMgYSBMaW51eC96SW1hZ2UgY29udmVudGlvbiB3aGlj aCB3ZQorQCByZWx5IG9uIGZvciBub3cuCisjZGVmaW5lIFpJTUFHRV9LRVJORUxfT0ZGU0VUIDB4 ODAwMAorCisuc2VjdGlvbiAudGV4dAorCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6CisJQCB6SW1h Z2UgaGVhZGVyCisucmVwdCAgIDgKKyAgICAgICAgbW92ICAgICByMCwgcjAKKy5lbmRyCisgICAg ICAgIGIgICAgICAgcmVzZXQKKyAgICAgICAgLndvcmQgICAweDAxNmYyODE4ICAgICAgQCBNYWdp YyBudW1iZXJzIHRvIGhlbHAgdGhlIGxvYWRlcgorICAgICAgICAud29yZCAgIDAJCUAgekltYWdl IHN0YXJ0IGFkZHJlc3MgKDAgPSByZWxvY2F0YWJsZSkKKyAgICAgICAgLndvcmQgICBfZWRhdGEg LSBfc3RhcnQgQCB6SW1hZ2UgZW5kIGFkZHJlc3MgKGV4Y2x1ZGVzIGJzcyBzZWN0aW9uKQorCUAg ZW5kIG9mIHpJbWFnZSBoZWFkZXIKKworQCBDYWxsZWQgYXQgYm9vdCB0aW1lLiBTZXRzIHVwIE1N VSwgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIHN0YWNrLCBhbmQgdGhlbiBjYWxscyBDIGFyY2hfaW5p dCgpIGZ1bmN0aW9uLgorQCA9PiByMiAtPiBEVEIKK0AgPD0gbmV2ZXIgcmV0dXJucworQCBOb3Rl OiB0aGlzIGJvb3QgY29kZSBuZWVkcyB0byBiZSB3aXRoaW4gdGhlIGZpcnN0ICgxTUIgLSBaSU1B R0VfS0VSTkVMX09GRlNFVCkgb2YgX3N0YXJ0LgorcmVzZXQ6CisJQCBQcm9ibGVtOiB0aGUgQyBj b2RlIHdhbnRzIHRvIGJlIGF0IGEga25vd24gYWRkcmVzcyAoX3N0YXJ0KSwgYnV0IFhlbiBtaWdo dAorCUAgbG9hZCB1cyBhbnl3aGVyZS4gV2UgaW5pdGlhbGlzZSB0aGUgTU1VIChtYXBwaW5nIHZp cnR1YWwgdG8gcGh5c2ljYWwgQCBhZGRyZXNzZXMpCisJQCBzbyBldmVyeXRoaW5nIGVuZHMgdXAg d2hlcmUgdGhlIGNvZGUgZXhwZWN0cyBpdCB0byBiZS4KKwlACisJQCBXZSBjYWxjdWxhdGUgdGhl IG9mZmV0IGJldHdlZW4gd2hlcmUgdGhlIGxpbmtlciB0aG91Z2h0IF9zdGFydCB3b3VsZCBiZSBh bmQgd2hlcmUKKwlAIGl0IGFjdHVhbGx5IGlzIGFuZCBpbml0aWFsaXNlIHRoZSBwYWdlIHRhYmxl cyB0byBoYXZlIHRoYXQgb2Zmc2V0IGZvciBldmVyeSBwYWdlLgorCUAKKwlAIFdoZW4gd2UgdHVy biBvbiB0aGUgTU1VLCB3ZSdyZSBzdGlsbCBleGVjdXRpbmcgYXQgdGhlIG9sZCBhZGRyZXNzLiBX ZSBkb24ndCB3YW50CisJQCB0aGUgY29kZSB0byBkaXNhcHBlYXIgZnJvbSB1bmRlciB1cy4gU28g d2UgaGF2ZSB0byBkbyB0aGUgbWFwcGluZyBpbiBzdGFnZXM6CisJQAorCUAgMS4gc2V0IHVwIGEg bWFwcGluZyB0byBvdXIgY3VycmVudCBwYWdlIGZyb20gYm90aCBpdHMgY3VycmVudCBhbmQgZGVz aXJlZCBhZGRyZXNzZXMKKwlAIDIuIGVuYWJsZSB0aGUgTU1VCisJQCAzLiBqdW1wIHRvIHRoZSBu ZXcgYWRkcmVzcworCUAgNC4gcmVtYXAgYWxsIHRoZSBvdGhlciBwYWdlcyB3aXRoIHRoZSBjYWxj dWxhdGVkIG9mZnNldAorCisJYWRyCXIxLCBfc3RhcnQJCUAgcjEgPSBwaHlzaWNhbCBhZGRyZXNz IG9mIF9zdGFydAorCWxkcglyMywgPV9zdGFydAkJQCByMyA9IChkZXNpcmVkKSB2aXJ0dWFsIGFk ZHJlc3Mgb2YgX3N0YXJ0CisJc3ViIAlyOSwgcjEsIHIzCQlAIHI5ID0gKHBoeXNpY2FsIC0gdmly dHVhbCkgb2Zmc2V0CisKKwlsZHIJcjcsID1fcGFnZV9kaXIJCUAgcjcgPSAoZGVzaXJlZCkgdmly dHVhbCBhZGRyIG9mIHRyYW5zbGF0aW9uIHRhYmxlCisJYWRkCXIxLCByNywgcjkJCUAgcjEgPSBw aHlzaWNhbCBhZGRyIG9mIHRyYW5zbGF0aW9uIHRhYmxlCisKKwlAIFRlbGwgdGhlIHN5c3RlbSB3 aGVyZSBvdXIgcGFnZSB0YWJsZSBpcyBsb2NhdGVkLgorCUAgVGhpcyBpcyB0aGUgMTYgS0IgdG9w LWxldmVsIHRyYW5zbGF0aW9uIHRhYmxlLCBpbiB3aGljaAorCUAgZWFjaCB3b3JkIG1hcHMgb25l IDFNQiB2aXJ0dWFsIHNlY3Rpb24gdG8gYSBwaHlzaWNhbCBzZWN0aW9uLgorCW1jcglwMTUsIDAs IHIxLCBjMiwgYzAsIDAJQCBzZXQgdHRicjAgPSByMQorCisJQCBTZXQgYWNjZXNzIHBlcm1pc3Np b24gZm9yIGRvbWFpbnMuCisJQCBEb21haW5zIGFyZSBkZXByZWNhdGVkLCBidXQgd2UgaGF2ZSB0 byBjb25maWd1cmUgdGhlbSBhbnl3YXkuCisJQCBXZSBtYXJrIGV2ZXJ5IHBhZ2UgYXMgYmVpbmcg ZG9tYWluIDAgYW5kIHNldCBkb21haW4gMCB0byAiY2xpZW50IG1vZGUiCisJQCAoY2xpZW50IG1v ZGUgPSB1c2UgYWNjZXNzIGZsYWdzIGluIHBhZ2UgdGFibGUpLgorCW1vdglyMCwgIzEJCQlAIDEg PSBjbGllbnQKKwltY3IJcDE1LCAwLCByMCwgYzMsIGMwLCAwCUAgREFDUgorCisJQCBUZW1wbGF0 ZSAoZmxhZ3MpIGZvciBhIDEgTUIgcGFnZS10YWJsZSBlbnRyeS4KKwlAIFRFWFsyOjBdIEMgQiA9 IDAwMSAxIDEgKG91dGVyIGFuZCBpbm5lciB3cml0ZS1iYWNrLCB3cml0ZS1hbGxvY2F0ZSkKKwls ZHIJcjgsID0oMHgyICsgIAkJLyogU2VjdGlvbiBlbnRyeSAqLyBcCisJCSAgICAgIDB4YyArICAJ CS8qIEMgQiAqLyBcCisJCSAgICAgICgzIDw8IDEwKSArIAkvKiBSZWFkL3dyaXRlICovIFwKKwkJ ICAgICAgKDEgPDwgMTIpICsJLyogVEVYICovIFwKKwkJICAgICAgKDEgPDwgMTYpICsJLyogU2hh cmFibGUgKi8gXAorCQkgICAgICAoMTw8MTkpKQkJLyogTm9uLXNlY3VyZSAqLworCUAgcjggPSB0 ZW1wbGF0ZSBwYWdlIHRhYmxlIGVudHJ5CisKKwlAIEFkZCBhbiBlbnRyeSBmb3IgdGhlIGN1cnJl bnQgcGh5c2ljYWwgc2VjdGlvbiwgYXQgdGhlIG9sZCBhbmQgbmV3CisJQCBhZGRyZXNzZXMuIEl0 J3MgT0sgaWYgdGhleSdyZSB0aGUgc2FtZS4KKwltb3YJcjAsIHBjLCBsc3IjMjAKKwltb3YJcjAs IHIwLCBsc2wjMjAJCUAgcjAgPSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgY29kZSdzIHNlY3Rp b24gc3RhcnQKKwlvcnIJcjMsIHIwLCByOAkJQCByMyA9IHRhYmxlIGVudHJ5IGZvciB0aGlzIHNl Y3Rpb24KKwlsZHIJcjQsID1fc3RhcnQJCUAgcjQgPSBkZXNpcmVkIHZpcnR1YWwgYWRkcmVzcyBv ZiB0aGlzIHNlY3Rpb24KKwlzdHIJcjMsIFtyMSwgcjQsIGxzciMxOF0gCUAgbWFwIGRlc2lyZWQg dmlydHVhbCBzZWN0aW9uIHRvIHRoaXMgY29kZQorCXN0cglyMywgW3IxLCByMCwgbHNyIzE4XQlA IG1hcCBjdXJyZW50IHNlY3Rpb24gdG8gdGhpcyBjb2RlIHRvbworCisJQCBJbnZhbGlkYXRlIFRM QgorCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJQCBUTEJJQUxMCisKKwlAIEVuYWJsZSBNTVUg LyBTQ1RMUgorCUAgV2UgbGVhdmUgY2FjaGVzIG9mZiBmb3Igbm93IGJlY2F1c2Ugd2UncmUgZ29p bmcgdG8gYmUgY2hhbmdpbmcgdGhlCisJQCBUTEIgYSBsb3QgYW5kIHRoaXMgYXZvaWRzIGhhdmlu ZyB0byBmbHVzaCB0aGUgY2FjaGVzIGVhY2ggdGltZS4KKwltcmMJcDE1LCAwLCByMSwgYzEsIGMw LCAwCUAgU0NUTFIKKwlvcnIJcjEsIHIxLCAjMHgxCQlAIEVuYWJsZSBNTVUKKwltY3IJcDE1LCAw LCByMSwgYzEsIGMwLCAwCUAgU0NUTFIKKwlpc2IKKworCWFkcglyMSwgc3RhZ2UyCQlAIFBoeXNp Y2FsIGFkZHJlc3Mgb2Ygc3RhZ2UyCisJc3ViCXIxLCByMSwgcjkJCUAgVmlydHVhbCBhZGRyZXNz IG9mIHN0YWdlMgorCWJ4CXIxCisKK0AgQ2FsbGVkIG9uY2UgdGhlIE1NVSBpcyBlbmFibGVkLiBU aGUgYm9vdCBjb2RlIGFuZCB0aGUgcGFnZSB0YWJsZSBhcmUgbWFwcGVkLAorQCBidXQgbm90aGlu ZyBlbHNlIGlzIHlldC4KK0AKK0AgPT4gcjIgLT4gZHRiIChwaHlzaWNhbCkKK0AgICAgcjcgPSB2 aXJ0dWFsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZQorQCAgICByOCA9IHNlY3Rpb24gZW50cnkgdGVt cGxhdGUgKGZsYWdzKQorQCAgICByOSA9IGRlc2lyZWQgcGh5c2ljYWwgLSB2aXJ0dWFsIG9mZnNl dAorQCAgICBwYyAtPiBzb21ld2hlcmUgaW4gbmV3bHktbWFwcGVkIHZpcnR1YWwgY29kZSBzZWN0 aW9uCitzdGFnZTI6CisJQCBJbnZhbGlkYXRlIFRMQgorCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcs IDAJQCBUTEJJQUxMCisJaXNiCisKKwlAIFRoZSBuZXcgbWFwcGluZyBoYXMgbm93IHRha2VuIGVm ZmVjdDoKKwlAIHI3IC0+IHBhZ2VfZGlyCisKKwlAIEZpbGwgaW4gdGhlIHdob2xlIHRvcC1sZXZl bCB0cmFuc2xhdGlvbiB0YWJsZSAoYXQgcGFnZV9kaXIpLgorCUAgUG9wdWxhdGUgdGhlIHdob2xl IHBhZ2VkaXIgd2l0aCAxTUIgc2VjdGlvbiBkZXNjcmlwdG9ycy4KKworCW1vdglyMSwgcjcJCQlA IHIxIC0+IGZpcnN0IHNlY3Rpb24gZW50cnkKKwlhZGQJcjMsIHIxLCAjNCo0KjEwMjQJQCBsaW1p dCAoNCBHQiBhZGRyZXNzIHNwYWNlLCA0IGJ5dGUgZW50cmllcykKKwlvcnIJcjAsIHI4LCByOQkJ QCByMCA9IGVudHJ5IG1hcHBpbmcgc2VjdGlvbiB6ZXJvIHRvIHN0YXJ0IG9mIHBoeXNpY2FsIFJB TQorMToKKwlzdHIJcjAsIFtyMV0sIzQJCUAgd3JpdGUgdGhlIHNlY3Rpb24gZW50cnkKKwlhZGQJ cjAsIHIwLCAjMSA8PCAyMCAJQCBuZXh0IHBoeXNpY2FsIHBhZ2UgKHdyYXBzKQorCWNtcAlyMSwg cjMKKwlibmUJMWIKKworCUAgSW52YWxpZGF0ZSBUTEIKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3 LCAwCUAgVExCSUFMTAorCWlzYgorCisJQCBBdCB0aGlzIHBvaW50LCBldmVyeXRoaW5nIGlzIG1h cHBlZCB0byBpdHMgZmluYWwgbG9jYXRpb24uCisJQCBJdCdzIG5vdyBzYWZlIHRvIHR1cm4gb24g Y2FjaGluZy4KKwlsZHIJcjAsID0oMyA8PCAxMSkgKyA0CUAgaWNhY2hlLCBicmFuY2ggcHJlZGlj dGlvbiwgZGNhY2hlCisJbXJjCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAlAIFNDVExSCisJb3JyCXIx LCByMSwgcjAKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCUAgU0NUTFIKKworCUAgU2V0IFZC QVIgLT4gZXhjZXB0aW9uX3ZlY3Rvcl90YWJsZQorCUAgU0NUTFIuViA9IDAKKwlhZHIJcjAsIGV4 Y2VwdGlvbl92ZWN0b3JfdGFibGUKKwltY3IJcDE1LCAwLCByMCwgYzEyLCBjMCwgMAorCisJQCBF bmFibGUgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQ6CisJQCAxLiBBY2Nlc3MgdG8gQ1AxMCBhbmQg Q1AxMSBtdXN0IGJlIGVuYWJsZWQgaW4gdGhlIENvcHJvY2Vzc29yIEFjY2VzcworCUAgICAgQ29u dHJvbCBSZWdpc3RlciAoQ1AxNS5DQUNSKToKKwltcmMJcDE1LCAwLCByMSwgYzEsIGMwLCAyCQlA IENBQ1IKKwlvcnIJcjEsIHIxLCAjKDMgPDwgMjApICsgKDMgPDwgMjIpCUAgZnVsbCBhY2Nlc3Mg Zm9yIENQMTAgJiBDUDExCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMgorCUAgMi4gVGhlIEVO IGJpdCBpbiB0aGUgRlBFWEMgcmVnaXN0ZXIgbXVzdCBiZSBzZXQ6CisJdm1ycwlyMCwgRlBFWEMK KwlvcnIJcjAsIHIwLCAjMTw8MzAJCUAgRU4gKGVuYWJsZSkKKwl2bXNyCUZQRVhDLCByMAorCisJ QCBJbml0aWFsaXNlIDE2IEtCIHN0YWNrCisJbGRyCXNwLCA9X2Jvb3Rfc3RhY2tfZW5kCisKKwlz dWIJcjAsIHIyLCByOQkJQCByMCAtPiBkZXZpY2UgdHJlZSAodmlydHVhbCBhZGRyZXNzKQorCW1v dglyMSwgcjkJCQlAIHIxID0gcGh5c2ljYWxfYWRkcmVzc19vZmZzZXQKKworCWIJYXJjaF9pbml0 CisKKy5wdXNoc2VjdGlvbiAuYnNzCitAIE5vdGU6IGNhbGxpbmcgYXJjaF9pbml0IHplcm9lcyBv dXQgdGhpcyByZWdpb24uCisuYWxpZ24gMTIKKy5nbG9ibCBzaGFyZWRfaW5mb19wYWdlCitzaGFy ZWRfaW5mb19wYWdlOgorCS5maWxsICgxMDI0KSwgNCwgMHgwCisKKy5hbGlnbiAzCisuZ2xvYmwg aXJxc3RhY2sKKy5nbG9ibCBpcnFzdGFja19lbmQKK2lycXN0YWNrOgorCS5maWxsICgxMDI0KSwg NCwgMHgwCitpcnFzdGFja19lbmQ6CisKKy5wb3BzZWN0aW9uCisKK0AgZXhjZXB0aW9uIGJhc2Ug YWRkcmVzcworLmFsaWduIDUKKy5nbG9ibCBleGNlcHRpb25fdmVjdG9yX3RhYmxlCitAIE5vdGU6 IHJlbWVtYmVyIHRvIGNhbGwgQ0xSRVggaWYgcmV0dXJuaW5nIGZyb20gYW4gZXhjZXB0aW9uOgor QCAiVGhlIGFyY2hpdGVjdHVyZSBlbmFibGVzIHRoZSBsb2NhbCBtb25pdG9yIHRvIHRyZWF0IGFu eSBleGNsdXNpdmUgc3RvcmUgYXMKK0AgIG1hdGNoaW5nIGEgcHJldmlvdXMgTERSRVggYWRkcmVz cy4gRm9yIHRoaXMgcmVhc29uLCB1c2Ugb2YgdGhlIENMUkVYCitAICBpbnN0cnVjdGlvbiB0byBj bGVhciBhbiBleGlzdGluZyB0YWcgaXMgcmVxdWlyZWQgb24gY29udGV4dCBzd2l0Y2hlcy4iCitA IC0tIEFSTSBDb3J0ZXgtQSBTZXJpZXMgUHJvZ3JhbW1lcuKAmXMgR3VpZGUgKFZlcnNpb246IDQu MCkKK2V4Y2VwdGlvbl92ZWN0b3JfdGFibGU6CisJYgkuIEAgcmVzZXQKKwliCS4gQCB1bmRlZmlu ZWQgaW5zdHJ1Y3Rpb24KKwliCS4gQCBzdXBlcnZpc29yIGNhbGwKKwliCS4gQCBwcmVmZXRjaCBj YWxsCisJYgkuIEAgcHJlZmV0Y2ggYWJvcnQKKwliCS4gQCBkYXRhIGFib3J0CisJYglpcnFfaGFu ZGxlciBAIGlycQorCS53b3JkIDB4ZTdmMDAwZjAgICAgQCBhYm9ydCBvbiBGSVEKKworaXJxX2hh bmRsZXI6CisJbGRyCXNwLCA9aXJxc3RhY2tfZW5kCisJcHVzaAl7cjAgLSByMTIsIHIxNH0KKwor CWxkcglyMCwgSVJRX2hhbmRsZXIKKwljbXAJcjAsICMwCisJLndvcmQJMHgwN2YwMDBmMCAgICAJ QCB1bmRlcSAtIHBhbmljIGlmIG5vIGhhbmRsZXIKKwlibHgJcjAJCUAgY2FsbCBoYW5kbGVyCisK KwlAIFJldHVybiBmcm9tIElSUQorCXBvcAl7cjAgLSByMTIsIHIxNH0KKwljbHJleAorCXN1YnMJ cGMsIGxyLCAjNAorCisuZ2xvYmwgSVJRX2hhbmRsZXIKK0lSUV9oYW5kbGVyOgorCS5sb25nCTB4 MAorCitAIFRoaXMgaXMgY2FsbGVkIGlmIHlvdSB0cnkgdG8gZGl2aWRlIGJ5IHplcm8uIEZvciBu b3csIHdlIG1ha2UgYSBzdXBlcnZpc29yIGNhbGwsCitAIHdoaWNoIHdpbGwgbWFrZSB1cyBoYWx0 LgorLmdsb2JsIHJhaXNlCityYWlzZToKKwlzdmMJMApkaWZmIC0tZ2l0IGEvZXh0cmFzL21pbmkt b3MvYXJjaC9hcm0vaHlwZXJjYWxsczMyLlMgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9oeXBl cmNhbGxzMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjhlMTc1Ci0t LSAvZGV2L251bGwKKysrIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vaHlwZXJjYWxsczMyLlMK QEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaHlwZXJjYWxsLlMK KyAqCisgKiBYZW4gaHlwZXJjYWxsIHdyYXBwZXJzCisgKgorICogU3RlZmFubyBTdGFiZWxsaW5p IDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4sIENpdHJpeCwgMjAxMgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IG9yLCB3aGVuIGRpc3RyaWJ1dGVkCisgKiBzZXBhcmF0ZWx5IGZyb20g dGhlIExpbnV4IGtlcm5lbCBvciBpbmNvcnBvcmF0ZWQgaW50byBvdGhlcgorICogc29mdHdhcmUg cGFja2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc291cmNlIGZpbGUgKHRoZSAiU29mdHdhcmUiKSwg dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKKyAq IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAq IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHhlbi94ZW4uaD4KKworI2Rl ZmluZSBfX0hWQyhpbW0xNikgLmxvbmcgKCgweEUxNDAwMDcwIHwgKCgoaW1tMTYpICYgMHhGRkYw KSA8PCA0KSB8ICgoaW1tMTYpICYgMHgwMDBGKSkgJiAweEZGRkZGRkZGKQorCisjZGVmaW5lIFhF Tl9JTU0gMHhFQTEKKworI2RlZmluZSBIWVBFUkNBTExfU0lNUExFKGh5cGVyY2FsbCkJCVwKKy5n bG9ibCBIWVBFUlZJU09SXyMjaHlwZXJjYWxsOwkJCVwKKy5hbGlnbiA0LDB4OTA7CQkJCQlcCitI WVBFUlZJU09SXyMjaHlwZXJjYWxsOgkJCQlcCisgICAgICAgIG1vdiByMTIsICNfX0hZUEVSVklT T1JfIyNoeXBlcmNhbGw7CVwKKyAgICAgICAgX19IVkMoWEVOX0lNTSk7CQkJCVwKKyAgICAgICAg bW92IHBjLCBscjsKKworI2RlZmluZSBfaHlwZXJjYWxsMCBIWVBFUkNBTExfU0lNUExFCisjZGVm aW5lIF9oeXBlcmNhbGwxIEhZUEVSQ0FMTF9TSU1QTEUKKyNkZWZpbmUgX2h5cGVyY2FsbDIgSFlQ RVJDQUxMX1NJTVBMRQorI2RlZmluZSBfaHlwZXJjYWxsMyBIWVBFUkNBTExfU0lNUExFCisjZGVm aW5lIF9oeXBlcmNhbGw0IEhZUEVSQ0FMTF9TSU1QTEUKKworX2h5cGVyY2FsbDIoc2NoZWRfb3Ap OworX2h5cGVyY2FsbDIobWVtb3J5X29wKTsKK19oeXBlcmNhbGwyKGV2ZW50X2NoYW5uZWxfb3Ap OworX2h5cGVyY2FsbDIoeGVuX3ZlcnNpb24pOworX2h5cGVyY2FsbDMoY29uc29sZV9pbyk7Citf aHlwZXJjYWxsMShwaHlzZGV2X29wKTsKK19oeXBlcmNhbGwzKGdyYW50X3RhYmxlX29wKTsKK19o eXBlcmNhbGwzKHZjcHVfb3ApOworX2h5cGVyY2FsbDEoc3lzY3RsKTsKK19oeXBlcmNhbGwxKGRv bWN0bCk7CitfaHlwZXJjYWxsMihodm1fb3ApOworX2h5cGVyY2FsbDEoeHNtX29wKTsKZGlmZiAt LWdpdCBhL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL21pbmlvcy1hcm0zMi5sZHMgYi9leHRyYXMv bWluaS1vcy9hcmNoL2FybS9taW5pb3MtYXJtMzIubGRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu ZGV4IDAwMDAwMDAuLjIxYzM4OTMKLS0tIC9kZXYvbnVsbAorKysgYi9leHRyYXMvbWluaS1vcy9h cmNoL2FybS9taW5pb3MtYXJtMzIubGRzCkBAIC0wLDAgKzEsNzkgQEAKK09VVFBVVF9BUkNIKGFy bSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIF9ib290X3N0YWNrIAkgPSAweDQwMDAw MDsJLyogMTYgS0IgYm9vdCBzdGFjayAqLworICBfYm9vdF9zdGFja19lbmQgPSAweDQwNDAwMDsK KyAgX3BhZ2VfZGlyICAgICAgPSAweDQwNDAwMDsJLyogMTYgS0IgdHJhbnNsYXRpb24gdGFibGUg Ki8KKyAgLgkJID0gMHg0MDgwMDA7CisgIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9u bHkgZGF0YSAqLworICAudGV4dCA6IHsKKwkqKC50ZXh0KQorCSooLmdudS53YXJuaW5nKQorCX0g PSAweDkwOTAKKworICBfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KKwor ICAucm9kYXRhIDogeyAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSB9CisgIC4gPSBBTElHTig0MDk2 KTsKKyAgX2Vyb2RhdGEgPSAuOworCisgIC8qIG5ld2xpYiBpbml0aWFsaXphdGlvbiBmdW5jdGlv bnMgKi8KKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIFBST1ZJREUgKF9fcHJlaW5pdF9hcnJheV9z dGFydCA9IC4pOworICAucHJlaW5pdF9hcnJheSAgICAgOiB7ICooLnByZWluaXRfYXJyYXkpIH0K KyAgUFJPVklERSAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICBQUk9WSURFIChfX2luaXRf YXJyYXlfc3RhcnQgPSAuKTsKKyAgLmluaXRfYXJyYXkgICAgIDogeyAqKC5pbml0X2FycmF5KSB9 CisgIFBST1ZJREUgKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgUFJPVklERSAoX19maW5pX2Fy cmF5X3N0YXJ0ID0gLik7CisgIC5maW5pX2FycmF5ICAgICA6IHsgKiguZmluaV9hcnJheSkgfQor ICBQUk9WSURFIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgLmN0b3JzIDogeworICAgICAg ICBfX0NUT1JfTElTVF9fID0gLjsKKyAgICAgICAgKiguY3RvcnMpCisJQ09OU1RSVUNUT1JTCisg ICAgICAgIExPTkcoMCkKKyAgICAgICAgX19DVE9SX0VORF9fID0gLjsKKyAgICAgICAgfQorCisg IC5kdG9ycyA6IHsKKyAgICAgICAgX19EVE9SX0xJU1RfXyA9IC47CisgICAgICAgICooLmR0b3Jz KQorICAgICAgICBMT05HKDApCisgICAgICAgIF9fRFRPUl9FTkRfXyA9IC47CisgICAgICAgIH0K KworICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCisJKiguZGF0YSkKKwl9CisKKyAgLyogTm90ZTog bGlua2VyIHdpbGwgaW5zZXJ0IGFueSBleHRyYSBzZWN0aW9ucyBoZXJlLCBqdXN0IGJlZm9yZSAu YnNzICovCisKKyAgLmJzcyA6IHsKKwlfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIGluY2x1 ZGVkIGluIGltYWdlICovCisJLyogTm90aGluZyBhZnRlciBoZXJlIGlzIGluY2x1ZGVkIGluIHRo ZSB6SW1hZ2UncyBzaXplICovCisKKwlfX2Jzc19zdGFydCA9IC47CisJKiguYnNzKQorICAgICAg ICAqKC5hcHAuYnNzKQorCX0KKyAgX2VuZCA9IC4gOworCisgIC8qIFNlY3Rpb25zIHRvIGJlIGRp c2NhcmRlZCAqLworICAvRElTQ0FSRC8gOiB7CisJKigudGV4dC5leGl0KQorCSooLmRhdGEuZXhp dCkKKwkqKC5leGl0Y2FsbC5leGl0KQorCX0KKworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlv bnMuICAqLworICAuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyIDAgOiB7ICooLnN0 YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhj bHN0ciAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggMCA6IHsgKiguc3Rh Yi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9Cisg IC5jb21tZW50IDAgOiB7ICooLmNvbW1lbnQpIH0KK30KZGlmZiAtLWdpdCBhL2V4dHJhcy9taW5p LW9zL2FyY2gvYXJtL3NldHVwLmMgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9zZXR1cC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZmQ2MmYKLS0tIC9kZXYvbnVsbAor KysgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9zZXR1cC5jCkBAIC0wLDAgKzEsMTE5IEBACisj aW5jbHVkZSA8bWluaS1vcy9vcy5oPgorI2luY2x1ZGUgPG1pbmktb3Mva2VybmVsLmg+CisjaW5j bHVkZSA8bWluaS1vcy9naWMuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL2NvbnNvbGUuaD4KKyNpbmNs dWRlIDx4ZW4veGVuLmg+CisjaW5jbHVkZSA8eGVuL21lbW9yeS5oPgorI2luY2x1ZGUgPHhlbi9o dm0vcGFyYW1zLmg+CisjaW5jbHVkZSA8YXJjaF9tbS5oPgorI2luY2x1ZGUgPGxpYmZkdC5oPgor CisvKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgc3RhcnQtb2YtZGF5IGluZm8sIHN1Y2gg YXMgcGFnZXRhYmxlIGJhc2UgcG9pbnRlciwKKyAqIGFkZHJlc3Mgb2YgdGhlIHNoYXJlZF9pbmZv IHN0cnVjdHVyZSwgYW5kIHRoaW5ncyBsaWtlIHRoYXQuCisgKiBPbiB4ODYsIHRoZSBoeXBlcnZp c29yIHBhc3NlcyBpdCB0byB1cy4gT24gQVJNLCB3ZSBmaWxsIGl0IGluIG91cnNlbHZlcy4KKyAq LwordW5pb24gc3RhcnRfaW5mb191bmlvbiBzdGFydF9pbmZvX3VuaW9uOworCisvKgorICogU2hh cmVkIHBhZ2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvci4KKyAqIEV2ZW50 cyBmbGFncyBnbyBoZXJlLCBmb3IgZXhhbXBsZS4KKyAqLworc2hhcmVkX2luZm9fdCAqSFlQRVJW SVNPUl9zaGFyZWRfaW5mbzsKKworZXh0ZXJuIGNoYXIgc2hhcmVkX2luZm9fcGFnZVtQQUdFX1NJ WkVdOworCit2b2lkICpkZXZpY2VfdHJlZTsKKworc3RhdGljIGludCBodm1fZ2V0X3BhcmFtZXRl cihpbnQgaWR4LCB1aW50NjRfdCAqdmFsdWUpCit7CisgICAgc3RydWN0IHhlbl9odm1fcGFyYW0g eGh2OworICAgIGludCByZXQ7CisKKyAgICB4aHYuZG9taWQgPSBET01JRF9TRUxGOworICAgIHho di5pbmRleCA9IGlkeDsKKyAgICByZXQgPSBIWVBFUlZJU09SX2h2bV9vcChIVk1PUF9nZXRfcGFy YW0sICZ4aHYpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIEJVRygpOworICAgIH0KKyAg ICAqdmFsdWUgPSB4aHYudmFsdWU7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQg Z2V0X2NvbnNvbGUodm9pZCkKK3sKKyAgICB1aW50NjRfdCB2ID0gLTE7CisKKyAgICBodm1fZ2V0 X3BhcmFtZXRlcihIVk1fUEFSQU1fQ09OU09MRV9FVlRDSE4sICZ2KTsKKyAgICBzdGFydF9pbmZv LmNvbnNvbGUuZG9tVS5ldnRjaG4gPSB2OworCisgICAgaHZtX2dldF9wYXJhbWV0ZXIoSFZNX1BB UkFNX0NPTlNPTEVfUEZOLCAmdik7CisgICAgc3RhcnRfaW5mby5jb25zb2xlLmRvbVUubWZuID0g djsKKworICAgIHByaW50aygiQ29uc29sZSBpcyBvbiBwb3J0ICVkXG4iLCBzdGFydF9pbmZvLmNv bnNvbGUuZG9tVS5ldnRjaG4pOworICAgIHByaW50aygiQ29uc29sZSByaW5nIGlzIGF0IG1mbiAl eFxuIiwgc3RhcnRfaW5mby5jb25zb2xlLmRvbVUubWZuKTsKK30KKwordm9pZCBnZXRfeGVuYnVz KHZvaWQpCit7CisgICAgdWludDY0X3QgdmFsdWU7CisKKyAgICBpZiAoaHZtX2dldF9wYXJhbWV0 ZXIoSFZNX1BBUkFNX1NUT1JFX0VWVENITiwgJnZhbHVlKSkKKyAgICAgICAgQlVHKCk7CisKKyAg ICBzdGFydF9pbmZvLnN0b3JlX2V2dGNobiA9IChpbnQpdmFsdWU7CisKKyAgICBpZihodm1fZ2V0 X3BhcmFtZXRlcihIVk1fUEFSQU1fU1RPUkVfUEZOLCAmdmFsdWUpKQorICAgICAgICBCVUcoKTsK KyAgICBzdGFydF9pbmZvLnN0b3JlX21mbiA9ICh1bnNpZ25lZCBsb25nKXZhbHVlOworfQorCisv KgorICogSU5JVElBTCBDIEVOVFJZIFBPSU5ULgorICovCit2b2lkIGFyY2hfaW5pdCh2b2lkICpk dGJfcG9pbnRlciwgaW50IHBoeXNpY2FsX29mZnNldCkKK3sKKyAgICBzdHJ1Y3QgeGVuX2FkZF90 b19waHlzbWFwIHhhdHA7CisgICAgaW50IHI7CisKKyAgICBtZW1zZXQoJl9fYnNzX3N0YXJ0LCAw LCAmX2VuZCAtICZfX2Jzc19zdGFydCk7CisKKyAgICBwaHlzaWNhbF9hZGRyZXNzX29mZnNldCA9 IHBoeXNpY2FsX29mZnNldDsKKworICAgIHhwcmludGsoIlZpcnR1YWwgLT4gcGh5c2ljYWwgb2Zm c2V0ID0gJXhcbiIsIHBoeXNpY2FsX2FkZHJlc3Nfb2Zmc2V0KTsKKworICAgIHhwcmludGsoIkNo ZWNraW5nIERUQiBhdCAleC4uLlxuIiwgZHRiX3BvaW50ZXIpOworCisgICAgaWYgKChyID0gZmR0 X2NoZWNrX2hlYWRlcihkdGJfcG9pbnRlcikpKSB7CisgICAgICAgIHhwcmludGsoIkludmFsaWQg RFRCIGZyb20gWGVuOiAlc1xuIiwgZmR0X3N0cmVycm9yKHIpKTsKKyAgICAgICAgQlVHKCk7Cisg ICAgfQorICAgIGRldmljZV90cmVlID0gZHRiX3BvaW50ZXI7CisKKyAgICAvKiBNYXAgc2hhcmVk X2luZm8gcGFnZSAqLworICAgIHhhdHAuZG9taWQgPSBET01JRF9TRUxGOworICAgIHhhdHAuaWR4 ID0gMDsKKyAgICB4YXRwLnNwYWNlID0gWEVOTUFQU1BBQ0Vfc2hhcmVkX2luZm87CisgICAgeGF0 cC5ncGZuID0gdmlydF90b19wZm4oc2hhcmVkX2luZm9fcGFnZSk7CisgICAgaWYgKEhZUEVSVklT T1JfbWVtb3J5X29wKFhFTk1FTV9hZGRfdG9fcGh5c21hcCwgJnhhdHApICE9IDApCisgICAgICAg IEJVRygpOworICAgIEhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPSAoc3RydWN0IHNoYXJlZF9pbmZv ICopc2hhcmVkX2luZm9fcGFnZTsKKworICAgIC8qIEZpbGwgaW4gc3RhcnRfaW5mbyAqLworICAg IGdldF9jb25zb2xlKCk7CisgICAgZ2V0X3hlbmJ1cygpOworCisgICAgZ2ljX2luaXQoKTsKKwor ICAgIHN0YXJ0X2tlcm5lbCgpOworfQorCit2b2lkCithcmNoX2Zpbmkodm9pZCkKK3sKK30KKwor dm9pZAorYXJjaF9kb19leGl0KHZvaWQpCit7Cit9Ci0tIAoyLjAuMQoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==