From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,1/2] usb: misc: xapea00x: add driver for Xaptum ENF Access Card From: Greg Kroah-Hartman Message-Id: <20180430160526.GA8479@kroah.com> Date: Mon, 30 Apr 2018 09:05:26 -0700 To: "David R. Bild" Cc: Oliver Neukum , linux-usb@vger.kernel.org List-ID: T24gTW9uLCBBcHIgMzAsIDIwMTggYXQgMDc6NTQ6MTdBTSAtMDUwMCwgRGF2aWQgUi4gQmlsZCB3 cm90ZToKPiBUaGlzIGNvbW1pdCBhZGRzIGEgZHJpdmVyIGZvciB0aGUgWGFwdHVtIEVORiBBY2Nl c3MgQ2FyZCwgYSBUUE0yLjAKPiBoYXJkd2FyZSBtb2R1bGUgZm9yIGF1dGhlbnRpY2F0aW5nIElv VCBkZXZpY2VzIGFuZCBnYXRld2F5cy4KPiAKPiBUaGUgY2FyZCBjb25zaXN0cyBvZiBhIFNQSSBU UE0gMi4wIGNoaXAgYW5kIGEgVVNCLVNQSSBicmlkZ2UuIFRoaXMKPiBkcml2ZXIgY29uZmlndXJl cyB0aGUgYnJpZGdlLCByZWdpc3RlcnMgdGhlIGJyaWRnZSBhcyBhbiBTUEkKPiBjb250cm9sbGVy LCBhbmQgYWRkcyB0aGUgVFBNIDIuMCBhcyBhbiBTUEkgZGV2aWNlLiAgVGhlIGluLWtlcm5lbCBU UE0KPiAyLjAgZHJpdmVyIGlzIHRoZW4gYXV0b21hdGljYWxseSBsb2FkZWQgdG8gY29uZmlndXJl IHRoZSBUUE0gYW5kCj4gZXhwb3NlIGl0IHRvIHVzZXJzcGFjZS4KCkEgZmV3IHJhbmRvbSBVU0Ig ZHJpdmVyLWxpa2UgcmV2aWV3IGNvbW1lbnRzIG9mIG1pbm9yIHRoaW5ncyB0byB0d2Vhawpmb3Ig eW91ciBuZXh0IHN1Ym1pc3Npb24uICBPdmVyYWxsIGl0IGxvb2tzIGdvb2QgdG8gbWUsIGJ1dCB5 b3Ugc2hvdWxkCmFsc28gZ2V0IHRoZSBUUE0gbWFpbnRhaW5lcnMvZGV2ZWxvcGVycyB0byByZXZp ZXcgaXQgYXMgSSB3aWxsIHJlcXVpcmUKdGhlaXIgcmV2aWV3IGJlZm9yZSBJIGNhbiB0YWtlIGl0 IGluIHRoZSBVU0IgdHJlZS4KCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL21p c2MveGFwZWEwMHgvS2NvbmZpZwo+IEBAIC0wLDAgKzEsMTYgQEAKPiArY29uZmlnICBVU0JfWEFQ RUEwMFgKPiArICAgICAgICB0cmlzdGF0ZSAiWGFwdHVtIEVORiBBY2Nlc3MgY2FyZCBzdXBwb3J0 IChYQVAtRUEtMDB4KSIKPiArICAgICAgICBkZXBlbmRzIG9uIFVTQl9TVVBQT1JUCj4gKyAgICAg ICAgc2VsZWN0IFNQSQo+ICsgICAgICAgIHNlbGVjdCBUQ0dfVFBNCj4gKyAgICAgICAgc2VsZWN0 IFRDR19USVNfU1BJCgpEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJ3NlbGVjdCcgdGhlc2U/ICBXaHkg bm90IGp1c3QgZGVwZW5kIG9uIHRoZW0/CgoKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy91c2IvbWlzYy94YXBlYTAweC94YXBlYTAweC1icmlkZ2UuYwo+IEBAIC0wLDAgKzEsNDAwIEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ICsvKgo+ICsgKiAgRHJp dmVyIGZvciB0aGUgWEFQLUVBLTAweCBzZXJpZXMgb2YgdGhlIFhhcHR1bSBFZGdlIEFjY2VzcyBD YXJkLCBhCj4gKyAqICBUUE0gMi4wLWJhc2VkIGhhcmR3YXJlIG1vZHVsZSBmb3IgYXV0aGVudGlj YXRpbmcgSW9UIGRldmljZXMgYW5kCj4gKyAqICBnYXRld2F5cy4KPiArICoKPiArICogIENvcHly aWdodCAoYykgMjAxNyBYYXB0dW0sIEluYy4KCkl0J3MgMjAxOCBub3cgOikKCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgInhhcGVhMDB4LmgiCj4gKwo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0NNRF9S RUFECQkgIDB4MDAKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9DTURfV1JJVEUJCSAgMHgwMQo+ICsj ZGVmaW5lIFhBUEVBMDBYX0JSX0NNRF9XUklURVJFQUQJICAweDAyCj4gKwo+ICsjZGVmaW5lIFhB UEVBMDBYX0JSX0JSRVFUWVBfU0VUCQkgIDB4NDAKPiArCj4gKyNkZWZpbmUgWEFQRUEwMFhfQlJf QlJFUV9TRVRfR1BJT19WQUxVRVMgIDB4MjEKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9CUkVRX1NF VF9HUElPX0NTCSAgMHgyNQo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0JSRVFfU0VUX1NQSV9XT1JE CSAgMHgzMQo+ICsKPiArI2RlZmluZSBYQVBFQTAwWF9CUl9VU0JfVElNRU9VVAkJICAxMDAwIC8v IG1zZWNzCj4gKwo+ICsjZGVmaW5lIFhBUEVBMDBYX0JSX0NTX0RJU0FCTEVECQkgIDB4MDAKCk9k ZCBwbGFjZW1lbnQgb2Ygc3BhY2VzIGFmdGVyIHRoZSB0YWJzLCB3aHk/CgoKPiArCj4gKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCj4gKyAqIEJyaWRnZSBVU0IgdHJhbnNmZXJzCj4gKyAqLwo+ICsK PiArc3RydWN0IHhhcGVhMDB4X2JyX2J1bGtfY29tbWFuZCB7Cj4gKwlfX3UxNiAgcmVzZXJ2ZWQx Owo+ICsJX191OCAgIGNvbW1hbmQ7Cj4gKwlfX3U4ICAgcmVzZXJ2ZWQyOwo+ICsJX19sZTMyIGxl bmd0aDsKPiArfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gKwo+ICsvKioKPiArICog eGFwZWEwMHhfYnJfcHJlcF9idWxrX2NvbW1hbmQgLSBQcmVwYXJlcyB0aGUgYnVsayBjb21tYW5k IGhlYWRlciB3aXRoCj4gKyAqIHRoZSBzdXBwbGllZCB2YWx1ZXMuCj4gKyAqIEBoZHI6IHBvaW50 ZXIgdG8gaGVhZGVyIHRvIHByZXBhcmUKPiArICogQGNvbW1hbmQ6IHRoZSBjb21tYW5kIGlkIGZv ciB0aGUgY29tbWFuZAo+ICsgKiBAbGVuZ3RoOiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbW1h bmQgZGF0YQo+ICsgKgo+ICsgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKPiArICoKPiArICog UmV0dXJuOiBJZiBzdWNjZXNzZnVsLCAwLiBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1i ZXIuCj4gKyAqLwoKWW91IGRvbid0IG5lZWQga2VybmVsZG9jIGNvbW1lbnRzIGZvciBzdGF0aWMg ZnVuY3Rpb25zLiAgTmljZSwgYnV0IG5vdCBhCnJlcXVpcmVtZW50IGF0IGFsbC4KCj4gK3N0YXRp YyBpbnQgeGFwZWEwMHhfYnJfYnVsa19yZWFkKHN0cnVjdCB4YXBlYTAweF9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKPiArCQkJCSBpbnQgbGVuKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgcGlwZTsK PiArCXZvaWQgKmJ1ZjsKPiArCWludCBhY3R1YWxfbGVuLCByZXR2YWw7Cj4gKwo+ICsJYnVmID0g a3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpIHsKPiArCQlyZXR2YWwgPSAt RU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXBpcGUgPSB1c2JfcmN2YnVsa3Bp cGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW4tPmJFbmRwb2ludEFkZHJlc3MpOwo+ICsJcmV0dmFs ID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwgcGlwZSwgYnVmLCBsZW4sICZhY3R1YWxfbGVuLAo+ ICsJCQkgICAgICBYQVBFQTAwWF9CUl9VU0JfVElNRU9VVCk7Cj4gKwo+ICsJaWYgKHJldHZhbCkg ewo+ICsJCWRldl93YXJuKCZkZXYtPmludGVyZmFjZS0+ZGV2LAo+ICsJCQkgIiVzOiB1c2JfYnVs a19tc2coKSBmYWlsZWQgd2l0aCAlZFxuIiwKPiArCQkJIF9fZnVuY19fLCByZXR2YWwpOwo+ICsJ CWdvdG8gZnJlZV9idWY7Cj4gKwl9CgpJcyB0aGlzIGdvaW5nIHRvIGdldCBub2lzeSB3aGVuIHRo ZSBkZXZpY2UgZ2V0cyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbT8KCj4gKwo+ICsJbWVtY3B5KGRh dGEsIGJ1ZiwgYWN0dWFsX2xlbik7Cj4gKwlyZXR2YWwgPSAwOwo+ICsKPiArZnJlZV9idWY6Cj4g KwlremZyZWUoYnVmKTsKPiArCj4gK291dDoKPiArCXJldHVybiByZXR2YWw7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiB4YXBlYTAweF9icl9jdHJsX3dyaXRlIC0gSXNzdWVzIGEgc2VuZCBjb250cm9s IHRyYW5zZmVyIHRvIHRoZSBicmlkZ2UKPiArICogY2hpcC4KPiArICogQGRldjogcG9pbnRlciB0 byB0aGUgZGV2aWNlIHRvIHdyaXRlIHRvCj4gKyAqIEBiUmVxdWVzdDogdGhlIGNvbW1hbmQKPiAr ICogQHdWYWx1ZTogdGhlIGNvbW1hbmQgdmFsdWUKPiArICogQHdJbmRleDogdGhlIGNvbW1hbmQg aW5kZXgKPiArICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGF0YQo+ICsgKiBAbGVu OiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbW1hbmQgZGF0YQo+ICsgKgo+ICsgKiBUaGUgcG9z c2libGUgYlJlcXVlc3QsIHdWYWx1ZSwgYW5kIHdJbmRleCB2YWx1ZXMgYW5kIGRhdGEgZm9ybWF0 Cj4gKyAqIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGhhcmR3YXJlIGRhdGFzaGVldC4KPiArICoKPiAr ICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCj4gKyAqCj4gKyAqIFJldHVybjogSWYgc3VjY2Vz c2Z1bCwgMC4gT3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiArICovCj4gK3N0YXRp YyBpbnQgeGFwZWEwMHhfYnJfY3RybF93cml0ZShzdHJ1Y3QgeGFwZWEwMHhfZGV2aWNlICpkZXYs IHU4IGJSZXF1ZXN0LAo+ICsJCQkJICB1MTYgd1ZhbHVlLCB1MTYgd0luZGV4LCB1OCAqZGF0YSwg dTE2IGxlbikKPiArewo+ICsJdW5zaWduZWQgaW50IHBpcGU7Cj4gKwl2b2lkICpidWY7Cj4gKwlp bnQgcmV0dmFsOwo+ICsKPiArCS8qIGNvbnRyb2xfbXNnIGJ1ZmZlciBtdXN0IGJlIGRtYS1jYXBh YmxlIChlLmcuayBrbWFsbG9jLWVkLAo+ICsJICogbm90IHN0YWNrKS4JQ29weSBkYXRhIGludG8g c3VjaCBidWZmZXIgaGVyZSwgc28gd2UgY2FuIHVzZQo+ICsJICogc2ltcGxlciBzdGFjayBhbGxv Y2F0aW9uIGluIHRoZSBjYWxsZXJzIC0gd2UgaGF2ZSBubwo+ICsJICogcGVyZm9ybWFuY2UgY29u Y2VybnMgZ2l2ZW4gdGhlIHNtYWxsIGJ1ZmZlcnMgYW5kIGxvdwo+ICsJICogdGhyb3VnaHB1dHMg b2YgdGhpcyBkZXZpY2UuCj4gKwkgKi8KClRoaXMgaXMgd2VsbCBrbm93biBhbmQgYSByZXF1aXJl bWVudCBmb3IgYWxsIFVTQiBkcml2ZXJzLCBubyBuZWVkIHRvCmhhdmUgdG8gZG9jdW1lbnQgaXQg aGVyZSA6KQoKPiArCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFBNIFNQSSBEZXZpY2UgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKwlwcm9iZSA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9i ZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcm9iZSkgewo+ICsJCXJldHZhbCA9IC1FTk9NRU07 Cj4gKwkJZ290byBmcmVlX3NwaTsKPiArCX0KPiArCXhhcGVhMDB4X2luaXRfYXN5bmNfcHJvYmUo cHJvYmUsIGRldiwgeGFwZWEwMHhfdHBtX3Byb2JlKTsKPiArCj4gKwlzY2hlZHVsZV93b3JrKCZw cm9iZS0+d29yayk7Cj4gKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJzY2hlZHVsZWQgaW5p dGlhbGl6YXRpb24gb2YgVFBNXG4iKTsKCldlIGRvIG5vdCBjYXJlIDopCgpEcml2ZXJzIHNob3Vs ZCBiZSBzaWxlbnQsIHVubGVzcyBzb21ldGhpbmcgYmFkIGhhcHBlbnMuICBQbGVhc2UgcmVtb3Zl Cm5vaXN5IHN0dWZmIGxpa2UgdGhpcywgYW5kOgoKPiArCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gRmluaXNoZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKwlkZXZfaW5mbygmaW50 ZXJmYWNlLT5kZXYsICJkZXZpY2UgY29ubmVjdGVkXG4iKTsKClRoYXQgbGluZS4gIE5vdCBuZWVk ZWQgYXQgYWxsLgoKPiArCXJldHVybiAwOwo+ICsKPiArZnJlZV9zcGk6Cj4gKwlzcGlfdW5yZWdp c3Rlcl9tYXN0ZXIoZGV2LT5zcGlfbWFzdGVyKTsKPiArCj4gK2ZyZWVfZGV2Ogo+ICsJa3JlZl9w dXQoJmRldi0+a3JlZiwgeGFwZWEwMHhfZGVsZXRlKTsKPiArCj4gKwlkZXZfZXJyKCZpbnRlcmZh Y2UtPmRldiwgImRldmljZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKPiArCXJldHVybiBy ZXR2YWw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHhhcGVhMDB4X2Rpc2Nvbm5lY3Qoc3RydWN0 IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKPiArewo+ICsJc3RydWN0IHhhcGVhMDB4X2Rldmlj ZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwo+ICsKPiArCXVzYl9zZXRfaW50 ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKPiArCXNwaV91bnJlZ2lzdGVyX21hc3RlcihkZXYtPnNw aV9tYXN0ZXIpOwo+ICsKPiArCW11dGV4X2xvY2soJmRldi0+dXNiX211dGV4KTsKPiArCWRldi0+ aW50ZXJmYWNlID0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmZGV2LT51c2JfbXV0ZXgpOwo+ICsK PiArCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHhhcGVhMDB4X2RlbGV0ZSk7Cj4gKwo+ICsJZGV2X2lu Zm8oJmRldi0+dWRldi0+ZGV2LCAiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIik7CgpObyBuZWVkIGZv ciB0aGF0IGVpdGhlci4KCj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4YXBl YTAweF9kcml2ZXIgPSB7Cj4gKwkubmFtZQkJICAgICAgPSAieGFwZWEwMHgiLAoKS0JVSUxEX01P RF9OQU1FIGluc3RlYWQ/Cgo+ICsJLnByb2JlCQkgICAgICA9IHhhcGVhMDB4X3Byb2JlLAo+ICsJ LmRpc2Nvbm5lY3QJICAgICAgPSB4YXBlYTAweF9kaXNjb25uZWN0LAo+ICsJLnN1c3BlbmQJICAg ICAgPSBOVUxMLAo+ICsJLnJlc3VtZQkJICAgICAgPSBOVUxMLAo+ICsJLnJlc2V0X3Jlc3VtZQkg ICAgICA9IE5VTEwsCgpMZWF2ZSBOVUxMIGZpZWxkcyBhbG9uZSwgbm8gbmVlZCB0byBldmVuIGxp c3QgdGhlbSBoZXJlLgoKPiArCS5pZF90YWJsZQkgICAgICA9IHhhcGVhMDB4X2RldmljZXMsCj4g Kwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAwCgpBbmQgZHJvcCB0aGlzLCBhcyBpdCdzIHNldCB0 byAwIGJ5IGRlZmF1bHQuCgo+ICt9Owo+ICsKPiArbW9kdWxlX3VzYl9kcml2ZXIoeGFwZWEwMHhf ZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkRhdmlkIFIuIEJpbGQgPGRhdmlkLmJpbGRA eGFwdHVtLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYYXB0dW0gWEFQLUVBLTAweCBF TkYgQWNjZXNzIGNhcmQiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ICsKPiArTU9EVUxF X0FMSUFTKCJ4YXBlYTAweCIpOwoKSWNrLCBubywgdGhlIGJ1aWxkIHN5c3RlbSB3aWxsIGFkZCB0 aGUgcHJvcGVybHkgTU9EVUxFX0FMSUFTIHRvIHRoZQpjb2RlLCBkbyBub3Qgd3JpdGUgaXQgb3V0 ICJieSBoYW5kIiBoZXJlIGF0IGFsbC4gIEJhZCB0aGluZ3MgY2FuIGhhcHBlbgppZiB5b3UgZ2V0 IGl0IHdyb25nLgoKPiArc3RydWN0IHhhcGVhMDB4X2RldmljZSB7Cj4gKwlzdHJ1Y3Qga3JlZiBr cmVmOwo+ICsKPiArCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2Owo+ICsJLyoKPiArCSAqIFRoZSBp bnRlcmZhY2UgcG9pbnRlciB3aWxsIGJlIHNldCBOVUxMIHdoZW4gdGhlIGRldmljZQo+ICsJICog ZGlzY29ubmVjdHMuICBBY2Nlc3NpbmcgaXQgc2FmZSBvbmx5IHdoaWxlIGhvbGRpbmcgdGhlCj4g KwkgKiB1c2JfbXV0ZXguCj4gKwkgKi8KPiArCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZh Y2U7Cj4gKwkvKgo+ICsJICogVGggdXNiX211dGV4IG11c3QgYmUgaGVsZCB3aGlsZSBzeW5jaHJv bm91cyBVU0IgcmVxdWVzdHMgYXJlCj4gKwkgKiBpbiBwcm9ncmVzcy4gSXQgaXMgYWNxdWlyZWQg ZHVyaW5nIGRpc2Nvbm5lY3QgdG8gYmUgc3VyZQo+ICsJICogdGhhdCB0aGVyZSBpcyBub3QgYW4g b3V0c3RhbmRpbmcgcmVxdWVzdC4KPiArCSAqLwo+ICsJc3RydWN0IG11dGV4IHVzYl9tdXRleDsK PiArCj4gKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfaW47Cj4gKwlzdHJ1 Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfb3V0Owo+ICsKPiArCXUxNiBwaWQ7Cj4g Kwl1MTYgdmlkOwoKV2h5IGRvIHlvdSBjYXJlIGFib3V0IHRoZXNlIHZpZC9waWQgdmFsdWVzPyAg WW91IHNldCB0aGVtIGFuZCBuZXZlciB1c2UKdGhlbS4gIElmIHlvdSByZWFsbHkgbmVlZGVkIHRo ZW0sIHlvdSBjYW4gZ2V0IHRoZW0gZnJvbSB0aGUgcG9pbnRlciB0bwp0aGUgaW50ZXJmYWNlIGFi b3ZlLgoKCnRoYW5rcywKCmdyZWcgay1oCi0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlz dDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBh IG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZv IGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK