From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH i-g-t v3 3/6] tests/gem_scheduler: Add gem_scheduler test Date: Thu, 17 Mar 2016 08:49:27 +0000 Message-ID: <56EA6F97.4060002@intel.com> References: <1457607814-18751-1-git-send-email-derek.j.morton@intel.com> <1457607814-18751-4-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 229FB6E11E for ; Thu, 17 Mar 2016 08:49:29 +0000 (UTC) In-Reply-To: <1457607814-18751-4-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMC8wMy8xNiAxMTowMywgRGVyZWsgTW9ydG9uIHdyb3RlOgo+IFRoaXMgaXMgaW50ZW5k ZWQgdG8gdGVzdCB0aGUgc2NoZWR1bGVyIGJlaGF2aW91ciBpcyBjb3JyZWN0Lgo+IFRoZSBzdWJ0 ZXN0cyBhcmUKPiA8cmluZz4tYmFzaWMKPiBUZXN0cyB0aGF0IGJhdGNoIGJ1ZmZlcnMgb2YgdGhl IHNhbWUgcHJpb3JpdHkgc3VibWl0dGVkIHRvIGEgcmluZwo+IGV4ZWN1dGUgaW4gdGhlIG9yZGVy IHRoZXkgYXJlIHN1Ym1pdHRlZC4KPiA8cmluZz4tcmVhZAo+IFN1Ym1pdHMgYSBiYXRjaCBidWZm ZXIgd2l0aCBhIHJlYWQgZGVwZW5kZW5jeSB0byBhIGJ1ZmZlciBvYmplY3QgdG8KPiBhIHJpbmcg d2hpY2ggaXMgaGVsZCBpbiB0aGUgc2NoZWR1bGVyIHF1ZXVlIGJ5IGEgbG9uZyBydW5uaW5nIGJh dGNoCj4gYnVmZmVyLiBTdWJtaXQgYmF0Y2ggYnVmZmVycyB0byBvdGhlciByaW5ncyB0aGF0IGhh dmUgYSByZWFkIGRlcGVuZGVuY3kKPiB0byB0aGUgc2FtZSBidWZmZXIgb2JqZWN0LiBFbnN1cmUg dGhleSBleGVjdXRlIGJlZm9yZSB0aGUgYmF0Y2ggYnVmZmVyCj4gYmVpbmcgaGVsZCB1cCBiZWhp bmQgdGhlIGxvbmcgcnVubmluZyBiYXRjaCBidWZmZXIuCj4gPHJpbmc+LXdyaXRlCj4gU3VibWl0 cyBhIGJhdGNoIGJ1ZmZlciB3aXRoIGEgd3JpdGUgZGVwZW5kZW5jeSB0byBhIGJ1ZmZlciBvYmpl Y3QgdG8KPiBhIHJpbmcgd2hpY2ggaXMgaGVsZCBpbiB0aGUgc2NoZWR1bGVyIHF1ZXVlIGJ5IGEg bG9uZyBydW5uaW5nIGJhdGNoCj4gYnVmZmVyLiBTdWJtaXQgYmF0Y2ggYnVmZmVycyB0byBvdGhl ciByaW5ncyB0aGF0IGhhdmUgYSB3cml0ZSBkZXBlbmRlbmN5Cj4gdG8gdGhlIHNhbWUgYnVmZmVy IG9iamVjdC4gU3VibWl0IGJhdGNoIGJ1ZmZlcnMgd2l0aCBubyBpbnRlcmRlcGVuZGVuY2llcwo+ IHRvIGFsbCByaW5ncy4gRW5zdXJlIHRoZSBiYXRjaCBidWZmZXJzIHRoYXQgaGF2ZSB3cml0ZSBk ZXBlbmRlbmNpZXMgYXJlCj4gZXhlY3V0ZWQgaW4gc3VibWlzc2lvbiBvcmRlciBidXQgdGhlIGJh dGNoIGJ1ZmZlcnMgd2l0aG91dCBpbnRlcmRlcGVuZGVuY2llcwo+IGRvIG5vdCBnZXQgaGVsZCB1 cC4KPgo+IHYyOiBBZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gRGFuaWVsZSBDZXJhb2xv IFNwdXJpbwo+Cj4gdjM6IEFkZGVkIGxvZ2ljIHRvIHVzZSBnZW5lcmljIEJTRCByaW5nIGlmIHRo ZXJlIGlzIDEgYW5kIEJTRDEgLyBCU0QyIGlmIHRoZXJlCj4gICAgICBhcmUgMi4KPgo+IFNpZ25l ZC1vZmYtYnk6IERlcmVrIE1vcnRvbjxkZXJlay5qLm1vcnRvbkBpbnRlbC5jb20+Cj4gLS0tCj4g ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKPiAgIHRlc3RzL2dlbV9zY2hlZHVsZXIu YyAgfCA0NTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAgMiBmaWxlcyBjaGFuZ2VkLCA0NjAgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2dlbV9zY2hlZHVsZXIuYwo+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggZjhiMThiMC4uYzg4 ZTA0NSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMv TWFrZWZpbGUuc291cmNlcwo+IEBAIC02Niw2ICs2Niw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4g ICAJZ2VtX3JlcXVlc3RfcmV0aXJlIFwKPiAgIAlnZW1fcmVzZXRfc3RhdHMgXAo+ICAgCWdlbV9y aW5nZmlsbCBcCj4gKwlnZW1fc2NoZWR1bGVyIFwKPiAgIAlnZW1fc2V0X3RpbGluZ192c19ibHQg XAo+ICAgCWdlbV9zb2Z0cGluIFwKPiAgIAlnZW1fc3RvbGVuIFwKPiBkaWZmIC0tZ2l0IGEvdGVz dHMvZ2VtX3NjaGVkdWxlci5jIGIvdGVzdHMvZ2VtX3NjaGVkdWxlci5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40MzY0NDBhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L3Rlc3RzL2dlbV9zY2hlZHVsZXIuYwo+IEBAIC0wLDAgKzEsNDU5IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FS RS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgRGVyZWsgTW9ydG9uPGRlcmVrLmoubW9y dG9uQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNp bmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3Rk aW50Lmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNp bmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsjaW5jbHVkZSA8c3lz L3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4K PiArCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJDaGVjayBzY2hlZHVsZXIgYmVoYXZpb3VyLiBC YXNpYyB0ZXN0cyBlbnN1cmUgaW5kZXBlbmRhbnQgIgo+ICsgICAgICAgICAgICAgICAgICAgICAi YmF0Y2ggYnVmZmVycyBvZiB0aGUgc2FtZSBwcmlvcml0eSBhcmUgZXhlY3V0ZWQgaW4gIgo+ICsg ICAgICAgICAgICAgICAgICAgICAic3VibWlzc2lvbiBvcmRlci4gUmVhZC1yZWFkIHRlc3RzIGVu c3VyZSAiCj4gKyAgICAgICAgICAgICAgICAgICAgICJiYXRjaCBidWZmZXJzIHdpdGggYSByZWFk IGRlcGVuZGVuY3kgdG8gdGhlIHNhbWUgYnVmZmVyICIKPiArICAgICAgICAgICAgICAgICAgICAg Im9iamVjdCBkbyBub3QgYmxvY2sgZWFjaCBvdGhlci4gV3JpdGUtd3JpdGUgZGVwZW5kZW5jeSAi Cj4gKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0cyBlbnN1cmUgYmF0Y2ggYnVmZmVycyB3aXRo IGEgd3JpdGUgZGVwZW5kZW5jeSB0byBhICIKPiArICAgICAgICAgICAgICAgICAgICAgImJ1ZmZl ciBvYmplY3Qgd2lsbCBiZSBleGVjdXRlZCBpbiBzdWJtaXNzaW9uIG9yZGVyIGJ1dCAiCj4gKyAg ICAgICAgICAgICAgICAgICAgICJ3aWxsIG5vdCBibG9jayBleGVjdXRpb24gb2Ygb3RoZXIgaW5k ZXBlbmRhbnQgYmF0Y2ggIgo+ICsgICAgICAgICAgICAgICAgICAgICAiYnVmZmVycy4iKTsKPiAr Cj4gKyNkZWZpbmUgU0VDX1RPX05TRUMgKDEwMDAgKiAxMDAwICogMTAwMCkKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgcmluZyB7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsJaW50IGlkOwo+ICsJYm9v bCBleGlzdHM7Cj4gK30gcmluZ3NbXSA9IHsKPiArCXsgInJlbmRlciIsIEk5MTVfRVhFQ19SRU5E RVIsIGZhbHNlIH0sCj4gKwl7ICJic2QiLCAgICBJOTE1X0VYRUNfQlNEICwgZmFsc2UgfSwKPiAr CXsgImJzZDIiLCAgICBJOTE1X0VYRUNfQlNEIHwgMjw8MTMsIGZhbHNlIH0sCj4gKwl7ICJibHQi LCAgICBJOTE1X0VYRUNfQkxULCBmYWxzZSB9LAo+ICsJeyAidmVib3giLCAgSTkxNV9FWEVDX1ZF Qk9YLCBmYWxzZSB9LAo+ICt9OwoKSWYgeW91IGNhbid0IHVzZSBpbnRlbF9leGVjdXRpb25fZW5n aW5lcyBjb3VsZCB5b3UgYWRkIGEgY29tbWVudCB0byAKZXhwbGFpbiB3aHk/IGFsc28gY29uc2lk ZXJpbmcgdGhlIHJlbmFtaW5nIGdvaW5nIG9uIGluIHRoZSBrZXJuZWwgeW91IApjb2xkIHJlcGxh Y2UgInJpbmciIHdpdGggImVuZ2luZSIKCj4gKwo+ICsjZGVmaW5lIE5CUl9SSU5HUyAoc2l6ZW9m KHJpbmdzKS9zaXplb2Yoc3RydWN0IHJpbmcpKQo+ICsKPiArc3RhdGljIHZvaWQgY2hlY2tfcmlu Z3MoaW50IGZkKSB7Cj4gKwlpbnQgbG9vcDsKPiArCWZvcihsb29wPTA7IGxvb3AgPCBOQlJfUklO R1M7IGxvb3ArKykgewoKU3R5bGU6IHNwYWNlIGJldHdlZW4gZm9yL2lmIGFuZCAiKCIgaW4gdGhp cyBmaWxlCgo+ICsJCWlmKGdlbV9oYXNfcmluZyhmZCwgcmluZ3NbbG9vcF0uaWQpKSB7Cj4gKwkJ CWlmKHJpbmdzW2xvb3BdLmlkID09IChJOTE1X0VYRUNfQlNEIHwgMjw8MTMpKSB7Cj4gKwkJCQly aW5nc1tsb29wXS5leGlzdHMgPSBnZW1faGFzX2JzZDIoZmQpOwo+ICsJCQl9Cj4gKwkJCWVsc2Ug ewo+ICsJCQkJcmluZ3NbbG9vcF0uZXhpc3RzID0gdHJ1ZTsKCllvdSdyZSBtYXJraW5nIHRoZSBW RUJPWCBhcyBleGlzdGluZyBzbyBhZGRpbmcgYSBnZW4gcmVxdWlyZW1lbnQgaW4gdGhpcyAKZnVu Y3Rpb24gd291bGQgYmUgbmljZS4gSSBrbm93IHRoYXQgdGhlIGxpYnJhcnkgeW91J3JlIHVzaW5n IGFscmVhZHkgCnJlcXVpcmVzIGdlbjgsIGJ1dCB0aGUgcmVxdWlyZW1lbnQgZG9lc24ndCBsb29r IHRvIGJlIGV4cGxpY2l0IGFueXdoZXJlIAppbiB0aGlzIGZpbGUgc28gaXQgd291bGQgYmUgbmlj ZSB0byBhZGQgaXQgZm9yIGNsYXJpdHkuCgo+ICsJCQkJaWYocmluZ3NbbG9vcF0uaWQgPT0gSTkx NV9FWEVDX0JTRCkKPiArCQkJCQkvKiBJZiB0aGVyZSBpcyBCU0QyLCBuZWVkIHRvIG1ha2UgQlNE MQo+ICsJCQkJCSAqIGV4cGxpY2l0Lgo+ICsJCQkJCSAqLwo+ICsJCQkJCWlmKGdlbV9oYXNfYnNk MihmZCkpCj4gKwkJCQkJCXJpbmdzW2xvb3BdLmlkIHw9ICgxPDwxMyk7Cj4gKwkJCX0KPiArCQl9 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBkcm1faW50ZWxfYm8gKmNyZWF0ZV9hbmRfY2hlY2tf Ym8oZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBjb25zdCBjaGFyICpkZXNjKQo+ICt7Cj4gKwlk cm1faW50ZWxfYm8gKmJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgZGVzYywgQkFUQ0hf U1osIEJBVENIX1NaKTsKPiArCWlndF9hc3NlcnRfZihibywgIkZhaWxlZCBhbGxvY2F0aW5nICVz XG4iLCBkZXNjKTsKPiArCXJldHVybiBibzsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqY3JlYXRlX2RlbGF5X2JiKGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAq YnVmbWdyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHJpbmdpZCwgdWludDMyX3QgbG9vcHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1faW50ZWxfYm8gKmRlc3QpCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYnVmZmVyOwo+ICsJYnVmZmVyID0gaW50ZWxfYmF0Y2hi dWZmZXJfYWxsb2MoYnVmbWdyLCBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSk7Cj4gKwlpZ3RfYXNz ZXJ0KGJ1ZmZlcik7Cj4gKwlpZ3RfY3JlYXRlX2RlbGF5X2JiKGZkLCBidWZmZXIsIHJpbmdpZCwg bG9vcHMsIGRlc3QpOwo+ICsJcmV0dXJuIGJ1ZmZlcjsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqY3JlYXRlX3RpbWVzdGFtcF9iYihpbnQgZmQsIGRybV9pbnRl bF9idWZtZ3IgKmJ1Zm1nciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcmluZ2lkLCBkcm1faW50ZWxfYm8gKmRlc3QsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2ludGVs X2JvICpsb2FkLCBib29sIHdyaXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJ1ZmZlcjsKPiArCWJ1ZmZlciA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgaW50 ZWxfZ2V0X2RybV9kZXZpZChmZCkpOwo+ICsJaWd0X2Fzc2VydChidWZmZXIpOwo+ICsJaWd0X2Ny ZWF0ZV90aW1lc3RhbXBfYmIoZmQsIGJ1ZmZlciwgcmluZ2lkLCBkZXN0LCBsb2FkLCB3cml0ZSk7 Cj4gKwlyZXR1cm4gYnVmZmVyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpjcmVhdGVfbm9vcF9iYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5v b3BzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJ1ZmZlcjsKPiArCWJ1ZmZl ciA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgaW50ZWxfZ2V0X2RybV9kZXZpZChm ZCkpOwo+ICsJaWd0X2Fzc2VydChidWZmZXIpOwo+ICsJaWd0X2NyZWF0ZV9ub29wX2JiKGJ1ZmZl ciwgbm9vcHMpOwo+ICsJcmV0dXJuIGJ1ZmZlcjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5p dF9jb250ZXh0KGludCAqZmQsIGRybV9pbnRlbF9idWZtZ3IgKipidWZtZ3IsIGludCByaW5naWQp Cgppbml0X2NvbnRleHQgbWlnaHQgYmUgYSBiaXQgbWlzbGVhZGluZyBhcyBhIG5hbWUgYXMgeW91 J3JlIApub3QgaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1l IGFzIHlvdSdyZSAKbm90IGluaXRfY29udGV4dCBtaWdodCBiZSBhIGJpdCBtaXNsZWFkaW5nIGFz IGEgbmFtZSBhcyB5b3UncmUgCm5vdCBpbml0X2NvbnRleHQgbWlnaHQgYmUgYSBiaXQgbWlzbGVh ZGluZyBhcyBhIG5hbWUgYXMgeW91J3JlIApub3QgaW5pdF9jb250ZXh0IG1pZ2h0IGJlIGEgYml0 IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSAKbm90IGluaXRfY29udGV4dCBtaWdodCBi ZSBhIGJpdCBtaXNsZWFkaW5nIGFzIGEgbmFtZSBhcyB5b3UncmUgCm5vdCBpbml0X2NvbnRleHQg bWlnaHQgYmUgYSBiaXQgbWlzbGVhZGluZyBhcyBhIG5hbWUgYXMgeW91J3JlIApub3QgaW5pdF9j b250ZXh0IG1pZ2h0IGJlIGEgYml0IG1pc2xlYWRpbmcgYXMgYSBuYW1lIGFzIHlvdSdyZSBub3Qg IGEgCmN0eCBkaXJlY3RseSwgYWx0aG91Z2ggaW5pdGlhbGl6aW5nCgo+ICt7Cj4gKwlzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKm5vb3BfYmI7Cj4gKwkqZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJ VkVSX0lOVEVMKTsKPiArCWlndF9hc3NlcnQoKmZkID49IDApOwo+ICsJKmJ1Zm1nciA9IGRybV9p bnRlbF9idWZtZ3JfZ2VtX2luaXQoKmZkLCBCQVRDSF9TWik7Cj4gKwlpZ3RfYXNzZXJ0KCpidWZt Z3IpOwo+ICsJZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKCpidWZtZ3IpOwo+ICsJ LyogU2VuZCBhIG5vb3AgYmF0Y2ggYnVmZmVyIHRvIGZvcmNlIGFueSBkZWZlcnJlZCBpbml0aWFs aXNhdGlvbiAqLwo+ICsJbm9vcF9iYiA9IGNyZWF0ZV9ub29wX2JiKCpmZCwgKmJ1Zm1nciwgNSk7 Cj4gKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKG5vb3BfYmIsIHJpbmdpZCk7Cj4g KwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKG5vb3BfYmIpOwo+ICt9Cj4gKwo+ICsvKiBCYXNpYyB0 ZXN0LiBDaGVjayBiYXRjaCBidWZmZXJzIG9mIHRoZSBzYW1lIHByaW9yaXR5IGFuZCB3aXRoIG5v IGRlcGVuZGVuY2llcwo+ICsgKiBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHN1 Ym1pdHRlZC4KPiArICovCj4gKyNkZWZpbmUgTkJSX0JBU0lDX0ZEcyAoMykKPiArc3RhdGljIHZv aWQgcnVuX3Rlc3RfYmFzaWMoaW50IGluX2ZsaWdodCwgaW50IHJpbmdpZCkKPiArewo+ICsJaW50 IGZkW05CUl9CQVNJQ19GRHNdOwo+ICsJaW50IGxvb3A7Cj4gKwlkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3JbTkJSX0JBU0lDX0ZEc107Cj4gKwl1aW50MzJfdCAqZGVsYXlfYnVmLCAqdHMxX2J1Ziwg KnRzMl9idWY7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKnRzMV9iYiwgKnRzMl9iYjsK PiArCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqKmluX2ZsaWdodF9iYnM7Cj4gKwl1aW50MzJf dCBjYWxpYnJhdGVkXzFzOwo+ICsJZHJtX2ludGVsX2JvICpkZWxheV9ibywgKnRzMV9ibywgKnRz Ml9ibzsKPiArCj4gKwlpbl9mbGlnaHRfYmJzID0gbWFsbG9jKGluX2ZsaWdodCAqIHNpemVvZihz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKikpOwo+ICsJaWd0X2Fzc2VydChpbl9mbGlnaHRfYmJz KTsKPiArCj4gKwkvKiBOZWVkIG11bHRpcGxlIGk5MTUgZmQncy4gU2NoZWR1bGVyIHdpbGwgbm90 IGNoYW5nZSBleGVjdXRpb24gb3JkZXIgb2YKPiArCSAqIGJhdGNoIGJ1ZmZlcnMgZnJvbSB0aGUg c2FtZSBjb250ZXh0Lgo+ICsJICovCj4gKwlmb3IobG9vcD0wOyBsb29wIDwgTkJSX0JBU0lDX0ZE czsgbG9vcCsrKQo+ICsJCWluaXRfY29udGV4dCgmKGZkW2xvb3BdKSwgJihidWZtZ3JbbG9vcF0p LCByaW5naWQpOwo+ICsKPiArCj4gKwkvKiBDcmVhdGUgYnVmZmVyIG9iamVjdHMgKi8KPiArCWRl bGF5X2JvID0gY3JlYXRlX2FuZF9jaGVja19ibyhidWZtZ3JbMF0sICJkZWxheSBibyIpOwo+ICsJ dHMxX2JvID0gY3JlYXRlX2FuZF9jaGVja19ibyhidWZtZ3JbMV0sICJ0czEgYm8iKTsKPiArCXRz Ml9ibyA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVmbWdyWzJdLCAidHMyIGJvIik7Cj4gKwo+ICsJ LyogUHV0IHNvbWUgbm9uIHplcm8gdmFsdWVzIGluIHRoZSBkZWxheSBibyAqLwoKWW91IGRvIHRo aXMgd3JpdGUgZm9yIGV2ZXJ5IGRlbGF5IGJhdGNoLCBzbyB5b3UgY291bGQgbW92ZSBpdCB0byAK Y3JlYXRlX2RlbGF5X2JiIChvciB0byB0aGUgbGlicmFyeSBmdW5jdGlvbikKCj4gKwl7CgpXaHkg aXMgdGhpcyBleHRyYSBzY29wZSBuZWVkZWQ/ICJkYXRhIiBkb2Vzbid0IGNsYXNoIHdpdGggYW55 IG90aGVyIAp2YXJpYWJsZSBuYW1lCgo+ICsJCXVpbnQzMl90IGRhdGE9MHhmZmZmZmZmZjsKPiAr CQlkcm1faW50ZWxfYm9fc3ViZGF0YShkZWxheV9ibywgMCwgNCwgJmRhdGEpOwo+ICsJfQo+ICsK PiArCWNhbGlicmF0ZWRfMXMgPSBpZ3RfY2FsaWJyYXRlX2RlbGF5X2JiKGZkWzBdLCBidWZtZ3Jb MF0sIHJpbmdpZCk7Cj4gKwo+ICsJLyogQmF0Y2ggYnVmZmVycyB0byBmaWxsIHRoZSBpbiBmbGln aHQgcXVldWUgKi8KPiArCWluX2ZsaWdodF9iYnNbMF0gPSBjcmVhdGVfZGVsYXlfYmIoZmRbMF0s IGJ1Zm1nclswXSwgcmluZ2lkLCBjYWxpYnJhdGVkXzFzLCBkZWxheV9ibyk7Cj4gKwlmb3IobG9v cCA9IDE7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPiArCQlpbl9mbGlnaHRfYmJzW2xvb3Bd ID0gY3JlYXRlX25vb3BfYmIoZmRbMF0sIGJ1Zm1nclswXSwgNSk7Cj4gKwo+ICsJLyogRXh0cmEg YmF0Y2ggYnVmZmVycyBpbiB0aGUgc2NoZWR1bGVyIHF1ZXVlICovCj4gKwl0czFfYmIgPSBjcmVh dGVfdGltZXN0YW1wX2JiKGZkWzFdLCBidWZtZ3JbMV0sIHJpbmdpZCwgdHMxX2JvLCBOVUxMLCBm YWxzZSk7Cj4gKwl0czJfYmIgPSBjcmVhdGVfdGltZXN0YW1wX2JiKGZkWzJdLCBidWZtZ3JbMl0s IHJpbmdpZCwgdHMyX2JvLCBOVUxMLCBmYWxzZSk7Cj4gKwo+ICsJLyogRmx1c2ggYmF0Y2hidWZm ZXJzICovCj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPiArCQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGluX2ZsaWdodF9iYnNbbG9vcF0sIHJpbmdp ZCk7Cj4gKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKHRzMV9iYiwgcmluZ2lkKTsK PiArCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHMyX2JiLCByaW5naWQpOwo+ICsK PiArCS8qIFRoaXMgd2lsbCBub3QgcmV0dXJuIHVudGlsIHRoZSBibyBoYXMgZmluaXNoZWQgZXhl Y3V0aW5nICovCj4gKwlkcm1faW50ZWxfYm9fbWFwKGRlbGF5X2JvLCAwKTsKPiArCWRybV9pbnRl bF9ib19tYXAodHMxX2JvLCAwKTsKPiArCWRybV9pbnRlbF9ib19tYXAodHMyX2JvLCAwKTsKPiAr Cj4gKwlkZWxheV9idWYgPSBkZWxheV9iby0+dmlydHVhbDsKPiArCXRzMV9idWYgPSB0czFfYm8t PnZpcnR1YWw7Cj4gKwl0czJfYnVmID0gdHMyX2JvLT52aXJ0dWFsOwo+ICsKPiArCWlndF9kZWJ1 ZygiRGVsYXkgVGltZXN0YW1wID0gMHglMDgiIFBSSXgzMiAiXG4iLCBkZWxheV9idWZbMl0pOwo+ ICsJaWd0X2RlYnVnKCJUUzEgVGltZXN0YW1wID0gMHglMDgiIFBSSXgzMiAiXG4iLCB0czFfYnVm WzBdKTsKPiArCWlndF9kZWJ1ZygiVFMyIFRpbWVzdGFtcCA9IDB4JTA4IiBQUkl4MzIgIlxuIiwg dHMyX2J1ZlswXSk7Cj4gKwo+ICsJLyogYnVmWzBdIGluIHRoZSB0YXJnZXQgYnVmZmVyIHNob3Vs ZCBiZSAwIGlmIHRoZSBiYXRjaCBidWZmZXIgY29tcGxldGVkICovCj4gKwlpZ3RfYXNzZXJ0X2Yo ZGVsYXlfYnVmWzBdID09IDAsCj4gKwkgICAgICAgICAgICAgImRlbGF5X2J1ZlswXSBleHBlY3Rl ZCAweDAsIGdvdCAweCUiIFBSSXgzMiAiXG4iLCBkZWxheV9idWZbMF0pOwo+ICsKPiArCWlndF9h c3NlcnRfZihpZ3RfY29tcGFyZV90aW1lc3RhbXBzKGRlbGF5X2J1ZlsyXSwgdHMxX2J1ZlswXSks Cj4gKwkgICAgICAgICAgICAgIkRlbGF5IHRzICgweCUwOCIgUFJJeDMyICIpID4gVFMxIHRzICgw eCUwOCIgUFJJeDMyICIpXG4iLAo+ICsJICAgICAgICAgICAgIGRlbGF5X2J1ZlsyXSwgdHMxX2J1 ZlswXSk7Cj4gKwlpZ3RfYXNzZXJ0X2YoaWd0X2NvbXBhcmVfdGltZXN0YW1wcyh0czFfYnVmWzBd LCB0czJfYnVmWzBdKSwKPiArCSAgICAgICAgICAgICAiVFMxIHRzICgweCUwOCIgUFJJeDMyICIp ID4gVFMyIHRzICgweCUwOCIgUFJJeDMyICIpXG4iLAo+ICsJICAgICAgICAgICAgIHRzMV9idWZb MF0sIHRzMl9idWZbMF0pOwo+ICsKPiArCS8qIENsZWFudXAgKi8KPiArCWZvcihsb29wID0gMDsg bG9vcCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+ICsJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoaW5f ZmxpZ2h0X2Jic1tsb29wXSk7Cj4gKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKHRzMV9iYik7Cj4g KwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKHRzMl9iYik7Cj4gKwo+ICsJZHJtX2ludGVsX2JvX3Vu cmVmZXJlbmNlKGRlbGF5X2JvKTsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZSh0czFfYm8p Owo+ICsJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHRzMl9ibyk7Cj4gKwlmb3IobG9vcCA9IDA7 IGxvb3AgPCBOQlJfQkFTSUNfRkRzOyBsb29wKyspIHsKPiArCQlkcm1faW50ZWxfYnVmbWdyX2Rl c3Ryb3koYnVmbWdyW2xvb3BdKTsKPiArCQljbG9zZShmZFtsb29wXSk7Cj4gKwl9Cj4gKwlmcmVl KGluX2ZsaWdodF9iYnMpOwo+ICt9Cj4gKwo+ICsvKiBEZXBlbmRlbmN5IHRlc3QuCj4gKyAqIHdy aXRlPTAsIFN1Ym1pdCBiYXRjaCBidWZmZXJzIHdpdGggcmVhZCBkZXBlbmRlbmNpZXMgdG8gYWxs IHJpbmdzLiBEZWxheSBvbmUKPiArICogd2l0aCBhIGxvbmcgZXhlY3V0aW5nIGJhdGNoIGJ1ZmZl ci4gQ2hlY2sgdGhlIG90aGVycyBhcmUgbm90IGhlbGQgdXAuCj4gKyAqIHdyaXRlPTEsIFN1Ym1p dCBiYXRjaCBidWZmZXJzIHdpdGggd3JpdGUgZGVwZW5kZW5jaWVzIHRvIGFsbCByaW5ncy4gRGVs YXkgb25lCj4gKyAqIHdpdGggYSBsb25nIGV4ZWN1dGluZyBiYXRjaCBidWZmZXIuIEFsc28gc3Vi bWl0IGJhdGNoIGJ1ZmZlcnMgd2l0aCBubwo+ICsgKiBkZXBlbmRlbmNpZXMgdG8gYWxsIHJpbmdz LiBCYXRjaCBidWZmZXJzIHdpdGggd3JpdGUgZGVwZW5kZW5jaWVzIHNob3VsZCBiZQo+ICsgKiBl eGVjdXRlZCBpbiBzdWJtaXNzaW9uIG9yZGVyLiBUaGUgYmF0Y2ggYnVmZmVycyB3aXRoIG5vIGRl cGVuZGVuY2llcyBzaG91bGQKPiArICogbm90IGJlIGhlbGQgdXAuCj4gKyAqLwo+ICtzdGF0aWMg dm9pZCBydW5fdGVzdF9kZXBlbmRlbmN5KGludCBpbl9mbGlnaHQsIGludCByaW5nLCBib29sIHdy aXRlKQo+ICt7Cj4gKwlpbnQgZmRbTkJSX1JJTkdTXSwgZmQyW05CUl9SSU5HU107Cj4gKwlpbnQg bG9vcDsKPiArCWludCBwcmltZV9mZDsKPiArCXVpbnQzMl90ICpkZWxheV9idWYsICp0c19idWZb TkJSX1JJTkdTXSwgKnRzMl9idWZbTkJSX1JJTkdTXSwgKnNoYXJlZF9idWY7Cj4gKwl1aW50MzJf dCBjYWxpYnJhdGVkXzFzOwo+ICsJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyW05CUl9SSU5HU10s ICpidWZtZ3IyW05CUl9SSU5HU107Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKnRzX2Ji W05CUl9SSU5HU10sICp0czJfYmJbTkJSX1JJTkdTXSwgKippbl9mbGlnaHRfYmJzOwo+ICsJZHJt X2ludGVsX2JvICpkZWxheV9ibywgKnRzX2JvW05CUl9SSU5HU10sICp0czJfYm9bTkJSX1JJTkdT XSwgKnNoYXJlZF9ib1tOQlJfUklOR1NdOwo+ICsKPiArCWluX2ZsaWdodF9iYnMgPSBtYWxsb2Mo aW5fZmxpZ2h0ICogc2l6ZW9mKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqKSk7Cj4gKwlpZ3Rf YXNzZXJ0KGluX2ZsaWdodF9iYnMpOwo+ICsKPiArCS8qIE5lZWQgbXVsdGlwbGUgaTkxNSBmZCdz LiBTY2hlZHVsZXIgd2lsbCBub3QgY2hhbmdlIGV4ZWN1dGlvbiBvcmRlciBvZgo+ICsJICogYmF0 Y2ggYnVmZmVycyBmcm9tIHRoZSBzYW1lIGNvbnRleHQuCj4gKwkgKi8KPiArCWZvcihsb29wPTA7 IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewoKWW91IGhhdmUgc2V2ZXJhbCBsb29wcyBvbiBh bGwgZW5naW5lcyBidXQgd2l0aCBhIGJpdCBvZiByZW9yZGVyaW5nIHlvdSAKc2hvdWxkIGJlIGFi bGUgdG8gZml0IGV2ZXJ5dGhpbmcgaW4gbGVzcyBsb29wcy4gVW5sZXNzIEkndmUgbWlzc2VkIGEg CmRlcGVuZGVuY3ksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBkbyBzb21ldGhpbmcgbGlrZToKCmZv ciAobG9vcD0wOyBsb29wIDwgTkJSX1JJTkdTOyBsb29wKyspIHsKCWluaXRfY29udGV4dCgmKGZk W2xvb3BdKSwgJihidWZtZ3JbbG9vcF0pLCByaW5nc1tsb29wXS5pZCk7Cgl0c19ib1tsb29wXSA9 IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVmbWdyW2xvb3BdLCAidHMgYm8iKTsKCglpZiAobG9vcCA9 PSAwKQoJCXNoYXJlZF9ib1swXSA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8oLi4uKTsKCQlkcm1faW50 ZWxfYm9fZ2VtX2V4cG9ydF90b19wcmltZSguLi4pOwoJZWxzZQoJCXNoYXJlZF9ib1tsb29wXSA9 IGRybV9pbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fcHJpbWUoLi4uKTsKCgl0c19iYltsb29wXSA9 IGNyZWF0ZV90aW1lc3RhbXBfYmIoLi4pOwoKCWlmICh3cml0ZSkgewoJCS4uLi4KCX0KfQoKCkFs c28gdGhlIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSAiaWYgKHdyaXRlKSIgY2FzZSBhcmUg dGhlIHNhbWUgb2YgdGhlIG9uZXMgaW4gdGhlIG1haW4gbG9vcCB3aXRoIHRoZSBleGNlcHRpb24g b2YgdGhlIHNoYXJlZCBibyBzbyBwb3RlbnRpYWxseSB5b3UgY291bGQgbW92ZSB0aGUgd2hvbGUg YmxvY2sgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiBpZiBpdCBkb2Vzbid0IGdldCB0b28gbWVzc3ku CgoKPiArCQlpbml0X2NvbnRleHQoJihmZFtsb29wXSksICYoYnVmbWdyW2xvb3BdKSwgcmluZ3Nb bG9vcF0uaWQpOwo+ICsJCWlmKHdyaXRlKQo+ICsJCQlpbml0X2NvbnRleHQoJihmZDJbbG9vcF0p LCAmKGJ1Zm1ncjJbbG9vcF0pLCByaW5nc1tsb29wXS5pZCk7Cj4gKwl9Cj4gKwo+ICsJLyogQ3Jl YXRlIGJ1ZmZlciBvYmplY3RzICovCj4gKwlkZWxheV9ibyA9IGNyZWF0ZV9hbmRfY2hlY2tfYm8o YnVmbWdyW3JpbmddLCAiZGVsYXkgYm8iKTsKPiArCWZvcihsb29wID0gMDsgbG9vcCA8IE5CUl9S SU5HUzsgbG9vcCsrKSB7Cj4gKwkJdHNfYm9bbG9vcF0gPSBjcmVhdGVfYW5kX2NoZWNrX2JvKGJ1 Zm1ncltsb29wXSwgInRzIGJvIik7Cj4gKwkJaWYod3JpdGUpCj4gKwkJCXRzMl9ib1tsb29wXSA9 IGNyZWF0ZV9hbmRfY2hlY2tfYm8oYnVmbWdyMltsb29wXSwgInRzMiBibyIpOwo+ICsJfQo+ICsK PiArCS8qIENyZWF0ZSBzaGFyZWQgYnVmZmVyIG9iamVjdCAqLwo+ICsJc2hhcmVkX2JvWzBdID0g Y3JlYXRlX2FuZF9jaGVja19ibyhidWZtZ3JbMF0sICJzaGFyZWQgYm8iKTsKPiArCj4gKwlkcm1f aW50ZWxfYm9fZ2VtX2V4cG9ydF90b19wcmltZShzaGFyZWRfYm9bMF0sICZwcmltZV9mZCk7Cj4g Kwlmb3IobG9vcCA9IDE7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCXNoYXJlZF9i b1tsb29wXSA9IGRybV9pbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fcHJpbWUoYnVmbWdyW2xvb3Bd LAo+ICsJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbWVfZmQsIEJBVENIX1NaKTsKPiArCQlpZ3RfYXNzZXJ0KHNoYXJlZF9ib1tsb29wXSk7 Cj4gKwl9Cj4gKwljbG9zZShwcmltZV9mZCk7Cj4gKwo+ICsJLyogUHV0IHNvbWUgbm9uIHplcm8g dmFsdWVzIGluIHRoZSBkZWxheSBhbmQgc2hhcmVkIGJvICovCj4gKwlkcm1faW50ZWxfYm9fbWFw KGRlbGF5X2JvLCAxKTsKPiArCWRlbGF5X2J1ZiA9IGRlbGF5X2JvLT52aXJ0dWFsOwo+ICsJZGVs YXlfYnVmWzBdID0gMHhmZjsKPiArCWRybV9pbnRlbF9ib191bm1hcChkZWxheV9ibyk7Cj4gKwlk cm1faW50ZWxfYm9fbWFwKHNoYXJlZF9ib1swXSwgMSk7Cj4gKwlzaGFyZWRfYnVmID0gc2hhcmVk X2JvWzBdLT52aXJ0dWFsOwo+ICsJc2hhcmVkX2J1ZlswXSA9IDB4ZmYwMGZmMDA7Cj4gKwlkcm1f aW50ZWxfYm9fdW5tYXAoc2hhcmVkX2JvWzBdKTsKCnVzaW5nIHN1YmRhdGEgbWlnaHQgYmUgY2xl YW5lciBoZXJlIGFzIHdlbGwKCj4gKwo+ICsJY2FsaWJyYXRlZF8xcyA9IGlndF9jYWxpYnJhdGVf ZGVsYXlfYmIoZmRbcmluZ10sIGJ1Zm1ncltyaW5nXSwgcmluZ3NbcmluZ10uaWQpOwo+ICsKPiAr CS8qIEJhdGNoIGJ1ZmZlcnMgdG8gZmlsbCB0aGUgaW4gZmxpZ2h0IHF1ZXVlICovCj4gKwlpbl9m bGlnaHRfYmJzWzBdID0gY3JlYXRlX2RlbGF5X2JiKGZkW3JpbmddLCBidWZtZ3JbcmluZ10sIHJp bmdzW3JpbmddLmlkLAo+ICsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxp YnJhdGVkXzFzLCBkZWxheV9ibyk7Cj4gKwlmb3IobG9vcCA9IDE7IGxvb3AgPCBpbl9mbGlnaHQ7 IGxvb3ArKykKPiArCQlpbl9mbGlnaHRfYmJzW2xvb3BdID0gY3JlYXRlX25vb3BfYmIoZmRbcmlu Z10sIGJ1Zm1ncltyaW5nXSwgNSk7Cj4gKwo+ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJ TkdTOyBsb29wKyspIHsKPiArCQl0c19iYltsb29wXSA9IGNyZWF0ZV90aW1lc3RhbXBfYmIoZmRb bG9vcF0sIGJ1Zm1ncltsb29wXSwKPiArCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmluZ3NbbG9vcF0uaWQsIHRzX2JvW2xvb3BdLAo+ICsJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaGFyZWRfYm9bbG9vcF0sIHdyaXRlKTsKPiArCQlpZih3cml0ZSkKPiAr CQkJdHMyX2JiW2xvb3BdID0gY3JlYXRlX3RpbWVzdGFtcF9iYihmZDJbbG9vcF0sIGJ1Zm1ncjJb bG9vcF0sCj4gKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ3NbbG9v cF0uaWQsIHRzMl9ib1tsb29wXSwKPiArCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLCBmYWxzZSk7Cj4gKwl9Cj4gKwo+ICsJLyogRmx1c2ggYmF0Y2hidWZmZXJzICov Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBpbl9mbGlnaHQ7IGxvb3ArKykKPiArCQlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGluX2ZsaWdodF9iYnNbbG9vcF0sIHJpbmdzW3Jpbmdd LmlkKTsKPiArCj4gKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKHRzX2JiW3Jpbmdd LCByaW5nc1tyaW5nXS5pZCk7Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxv b3ArKykKPiArCQlpZigobG9vcCAhPSByaW5nKSAmJiByaW5nc1tsb29wXS5leGlzdHMpCj4gKwkJ CWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHNfYmJbbG9vcF0sIHJpbmdzW2xvb3Bd LmlkKTsKPiArCj4gKwlpZih3cml0ZSkgewo+ICsJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29u X3JpbmcodHMyX2JiW3JpbmddLCByaW5nc1tyaW5nXS5pZCk7Cj4gKwkJZm9yKGxvb3AgPSAwOyBs b29wIDwgTkJSX1JJTkdTOyBsb29wKyspCj4gKwkJCWlmKChsb29wICE9IHJpbmcpICYmIHJpbmdz W2xvb3BdLmV4aXN0cykKPiArCQkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3JpbmcodHMy X2JiW2xvb3BdLCByaW5nc1tsb29wXS5pZCk7Cj4gKwl9Cj4gKwo+ICsJLyogVGhpcyB3aWxsIG5v dCByZXR1cm4gdW50aWwgdGhlIGJvIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKi8KPiArCWRybV9p bnRlbF9ib19tYXAoZGVsYXlfYm8sIDApOwo+ICsJZGVsYXlfYnVmID0gZGVsYXlfYm8tPnZpcnR1 YWw7Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCWRy bV9pbnRlbF9ib19tYXAodHNfYm9bbG9vcF0sIDApOwo+ICsJCXRzX2J1Zltsb29wXSA9IHRzX2Jv W2xvb3BdLT52aXJ0dWFsOwo+ICsJCWlmKHdyaXRlKSB7Cj4gKwkJCWRybV9pbnRlbF9ib19tYXAo dHMyX2JvW2xvb3BdLCAwKTsKPiArCQkJdHMyX2J1Zltsb29wXSA9IHRzMl9ib1tsb29wXS0+dmly dHVhbDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogYnVmWzBdIGluIHRoZSB0YXJnZXQgYnVmZmVy IHNob3VsZCBiZSAwIGlmIHRoZSBiYXRjaCBidWZmZXIgY29tcGxldGVkICovCj4gKwlpZ3RfYXNz ZXJ0X2YoZGVsYXlfYnVmWzBdID09IDAsCj4gKwkgICAgICAgICAgICAgImRlbGF5X2J1ZlswXSBl eHBlY3RlZCAweDAsIGdvdCAweCUiIFBSSXgzMiAiXG4iLAo+ICsJICAgICAgICAgICAgIGRlbGF5 X2J1ZlswXSk7Cj4gKwo+ICsJaWd0X2RlYnVnKCIlNnMgZGVsYXkgdGltZXN0YW1wID0gMHglMDgi IFBSSXgzMiAiXG4iLAo+ICsJICAgICAgICAgIHJpbmdzW3JpbmddLm5hbWUsIGRlbGF5X2J1Zlsy XSk7Cj4gKwlmb3IobG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPiArCQlpZ3Rf ZGVidWcoIiU2cyBiYXRjaCB0aW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJICAg ICAgICAgIHJpbmdzW2xvb3BdLm5hbWUsIHRzX2J1Zltsb29wXVswXSk7Cj4gKwo+ICsJaWYod3Jp dGUpIHsKPiArCQlpZ3RfZGVidWcoIkluZGVwZW5kYW50IGJhdGNoIGJ1ZmZlcnNcbiIpOwo+ICsJ CWZvcihsb29wID0gMDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKQo+ICsJCQlpZ3RfZGVidWco IiU2cyBiYXRjaCB0aW1lc3RhbXAgPSAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJCSAgICAgICAg ICByaW5nc1tsb29wXS5uYW1lLCB0czJfYnVmW2xvb3BdWzBdKTsKPiArCX0KPiArCj4gKwlmb3Io bG9vcCA9IDA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykgewo+ICsJCWlmKChsb29wICE9IHJp bmcpICYmIHJpbmdzW2xvb3BdLmV4aXN0cykgewo+ICsJCQlpZih3cml0ZSkgewo+ICsJCQkJLyog V3JpdGUgZGVwZW5kZW5jeSwgZGVsYXllZCByaW5nIHNob3VsZCBydW4gZmlyc3QgKi8KPiArCQkJ CWlndF9hc3NlcnRfZihpZ3RfY29tcGFyZV90aW1lc3RhbXBzKHRzX2J1ZltyaW5nXVswXSwgdHNf YnVmW2xvb3BdWzBdKSwKPiArCQkJCSAgICAgICAgICAgICAiJXMgcmFuIGJlZm9yZSAlcyAtIDB4 JTA4IiBQUkl4MzIgIiB2cyAweCUwOCIgUFJJeDMyICJcbiIsCj4gKwkJCQkgICAgICAgICAgICAg cmluZ3NbbG9vcF0ubmFtZSwgcmluZ3NbcmluZ10ubmFtZSwKPiArCQkJCSAgICAgICAgICAgICB0 c19idWZbbG9vcF1bMF0sIHRzX2J1ZltyaW5nXVswXSk7Cj4gKwkJCQkvKiBTZWNvbmQgYmIgd2l0 aG91dCBkZXBlbmRlbmN5IHNob3VsZCBydW4gZmlyc3QgKi8KPiArCQkJCWlndF9hc3NlcnRfZihp Z3RfY29tcGFyZV90aW1lc3RhbXBzKHRzMl9idWZbbG9vcF1bMF0sIHRzX2J1Zltsb29wXVswXSks Cj4gKwkJCQkgICAgICAgICAgICAgIiglcykgaW5kZXBlbmRhbnQgYmIgd2FzIGhlbGQgdXAgLSAw eCUwOCIgUFJJeDMyICIgdnMgMHglMDgiIFBSSXgzMiAiXG4iLAo+ICsJCQkJICAgICAgICAgICAg IHJpbmdzW2xvb3BdLm5hbWUsIHRzX2J1Zltsb29wXVswXSwgdHMyX2J1Zltsb29wXVswXSk7Cj4g KwkJCX0KPiArCQkJZWxzZQo+ICsJCQkJLyogUmVhZCBkZXBlbmRlbmN5LCBkZWxheWVkIHJpbmcg c2hvdWxkIHJ1biBsYXN0ICovCj4gKwkJCQlpZ3RfYXNzZXJ0X2YoaWd0X2NvbXBhcmVfdGltZXN0 YW1wcyh0c19idWZbbG9vcF1bMF0sIHRzX2J1ZltyaW5nXVswXSksCj4gKwkJCQkgICAgICAgICAg ICAgIiVzIHJhbiBhZnRlciAlcyAtIDB4JTA4IiBQUkl4MzIgIiB2cyAweCUwOCIgUFJJeDMyICJc biIsCj4gKwkJCQkgICAgICAgICAgICAgcmluZ3NbbG9vcF0ubmFtZSwgcmluZ3NbcmluZ10ubmFt ZSwKPiArCQkJCSAgICAgICAgICAgICB0c19idWZbbG9vcF1bMF0sIHRzX2J1ZltyaW5nXVswXSk7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIENsZWFudXAgKi8KPiArCWZvcihsb29wID0gMDsgbG9v cCA8IGluX2ZsaWdodDsgbG9vcCsrKQo+ICsJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoaW5fZmxp Z2h0X2Jic1tsb29wXSk7Cj4gKwo+ICsJZm9yKGxvb3AgPSAwOyBsb29wIDwgTkJSX1JJTkdTOyBs b29wKyspIHsKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKHRzX2JiW2xvb3BdKTsKPiArCQlk cm1faW50ZWxfYm9fdW5yZWZlcmVuY2UodHNfYm9bbG9vcF0pOwo+ICsJCWRybV9pbnRlbF9ib191 bnJlZmVyZW5jZShzaGFyZWRfYm9bbG9vcF0pOwo+ICsJCWlmKHdyaXRlKSB7Cj4gKwkJCWludGVs X2JhdGNoYnVmZmVyX2ZyZWUodHMyX2JiW2xvb3BdKTsKPiArCQkJZHJtX2ludGVsX2JvX3VucmVm ZXJlbmNlKHRzMl9ib1tsb29wXSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRybV9pbnRlbF9ib191 bnJlZmVyZW5jZShkZWxheV9ibyk7CgpZb3UgY2FuIG1vdmUgdGhpcyB1bnJlZmVyZW5jaW5nIHRv IGJlZm9yZSB0aGUgYWJvdmUgbG9vcCBhbmQgdGhlbiBzcXVhc2ggCnRoZSAyIGxvb3BzIG9uTkJS X1JJTkdTaW50byBvbmUuCgpSZWdhcmRzLApEYW5pZWxlCgo+ICsKPiArCWZvcihsb29wID0gMDsg bG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKSB7Cj4gKwkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95 KGJ1Zm1ncltsb29wXSk7Cj4gKwkJY2xvc2UoZmRbbG9vcF0pOwo+ICsJCWlmKHdyaXRlKSB7Cj4g KwkJCWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShidWZtZ3IyW2xvb3BdKTsKPiArCQkJY2xvc2Uo ZmQyW2xvb3BdKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZnJlZShpbl9mbGlnaHRfYmJzKTsKPiAr fQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJaW50IGxvb3A7Cj4gKwlpbnQgaW5fZmxpZ2h0Owo+ ICsJaW50IGZkOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlpbnQgZGVidWdfZmQ7Cj4gKwkJ aW50IGw7Cj4gKwkJY2hhciBidWZbNl07Cj4gKwkJLyogR2V0IG5iciBvZiBiYXRjaCBidWZmZXJz IHRoYXQgdGhlIHNjaGVkdWxlciB3aWxsIHF1ZXVlIGluIHRoZQo+ICsJCSAqIEhXLiBJZiB0aGlz IGRlYnVnZnMgZmlsZSBkb2VzIG5vdCBleGlzdCB0aGVyZSBpcyBubyBzY2hlZHVsZXIKPiArCQkg KiBzbyBza2lwIHRoZSB0ZXN0Lgo+ICsJCSAqLwo+ICsJCWRlYnVnX2ZkID0gaWd0X2RlYnVnZnNf b3BlbigiaTkxNV9zY2hlZHVsZXJfbWluX2ZseWluZyIsIE9fUkRPTkxZKTsKPiArCQlpZ3Rfc2tp cF9vbihkZWJ1Z19mZCA9PSAtMSk7Cj4gKwkJbCA9IHJlYWQoZGVidWdfZmQsIGJ1Ziwgc2l6ZW9m KGJ1ZiktMSk7Cj4gKwkJaWd0X2Fzc2VydChsID4gMCk7Cj4gKwkJaWd0X2Fzc2VydChsIDwgc2l6 ZW9mKGJ1ZikpOwo+ICsJCWJ1ZltsXSA9ICdcMCc7Cj4gKwkJLyogTWF5IGJlIGEgZGVjaW1hbCBv ciBoZXggbnVtYmVyIGRlcGVuZGluZyBvbiBzY2hlZHVsZXIgdmVyc2lvbiAqLwo+ICsJCWlmKHNz Y2FuZihidWYsICIweCUyeCIsICZpbl9mbGlnaHQpICE9IDEpCj4gKwkJCWlndF9hc3NlcnRfZihz c2NhbmYoYnVmLCAiJTJkIiwgJmluX2ZsaWdodCkgPT0gMSwKPiArCQkJICAgICAgICAgICAgICJF cnJvciByZWFkaW5nIGZyb20gaTkxNV9zY2hlZHVsZXJfbWluX2ZseWluZ1xuIik7Cj4gKwkJY2xv c2UoZGVidWdfZmQpOwo+ICsJCWlndF9kZWJ1ZygiaW4gZmxpZ2h0ID0gJWRcbiIsIGluX2ZsaWdo dCk7Cj4gKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfYXNz ZXJ0KGZkID49IDApOwo+ICsJCWNoZWNrX3JpbmdzKGZkKTsKPiArCX0KPiArCj4gKwlmb3IgKGxv b3A9MDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsrKQo+ICsJCWlndF9zdWJ0ZXN0X2YoIiVzLWJh c2ljIiwgcmluZ3NbbG9vcF0ubmFtZSkgewo+ICsJCQlnZW1fcmVxdWlyZV9yaW5nKGZkLCByaW5n c1tsb29wXS5pZCk7Cj4gKwkJCXJ1bl90ZXN0X2Jhc2ljKGluX2ZsaWdodCwgcmluZ3NbbG9vcF0u aWQpOwo+ICsJCX0KPiArCj4gKwlmb3IgKGxvb3A9MDsgbG9vcCA8IE5CUl9SSU5HUzsgbG9vcCsr KQo+ICsJCWlndF9zdWJ0ZXN0X2YoIiVzLXJlYWQiLCByaW5nc1tsb29wXS5uYW1lKSB7Cj4gKwkJ CWdlbV9yZXF1aXJlX3JpbmcoZmQsIHJpbmdzW2xvb3BdLmlkKTsKPiArCQkJcnVuX3Rlc3RfZGVw ZW5kZW5jeShpbl9mbGlnaHQsIGxvb3AsIGZhbHNlKTsKPiArCQl9Cj4gKwo+ICsJZm9yIChsb29w PTA7IGxvb3AgPCBOQlJfUklOR1M7IGxvb3ArKykKPiArCQlpZ3Rfc3VidGVzdF9mKCIlcy13cml0 ZSIsIHJpbmdzW2xvb3BdLm5hbWUpIHsKPiArCQkJZ2VtX3JlcXVpcmVfcmluZyhmZCwgcmluZ3Nb bG9vcF0uaWQpOwo+ICsJCQlydW5fdGVzdF9kZXBlbmRlbmN5KGluX2ZsaWdodCwgbG9vcCwgdHJ1 ZSk7Cj4gKwkJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQljbG9zZShmZCk7Cj4gKwl9Cj4g K30KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=