From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH i-g-t v2] tests/kms_concurrent: Concurrent and interruptible subtests for atomic Date: Tue, 11 Apr 2017 10:18:45 +0200 Message-ID: References: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> <1491826264.9258.66.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6444D6E43B for ; Tue, 11 Apr 2017 08:18:47 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Kahola, Mika" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T3AgMTEtMDQtMTcgb20gMDk6NDIgc2NocmVlZiBLYWhvbGEsIE1pa2E6Cj4KPj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0KPj4gRnJvbTogTWFhcnRlbiBMYW5raG9yc3QgW21haWx0bzptYWFy dGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb21dCj4+IFNlbnQ6IE1vbmRheSwgQXByaWwgMTAs IDIwMTcgMzozOSBQTQo+PiBUbzogS2Fob2xhLCBNaWthIDxtaWthLmthaG9sYUBpbnRlbC5jb20+ OyBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg aS1nLXQgdjJdIHRlc3RzL2ttc19jb25jdXJyZW50OiBDb25jdXJyZW50IGFuZCBpbnRlcnJ1cHRp YmxlCj4+IHN1YnRlc3RzIGZvciBhdG9taWMKPj4KPj4gT3AgMTAtMDQtMTcgb20gMTQ6MTEgc2No cmVlZiBNaWthIEthaG9sYToKPj4+IE9uIFdlZCwgMjAxNy0wMy0yOSBhdCAxMTo1MyArMDIwMCwg TWFhcnRlbiBMYW5raG9yc3Qgd3JvdGU6Cj4+Pj4gT3AgMTUtMDMtMTcgb20gMDk6NDMgc2NocmVl ZiBNaWthIEthaG9sYToKPj4+Pj4gVGhpcyB0ZXN0IGNhc2UgaW50cm9kdWNlcyBjb25jdXJyZW50 bHkgcnVubmluZyB0ZXN0IGNhc2VzIGZvciBhdG9taWMKPj4+Pj4gbW9kZXNldHRpbmcuCj4+Pj4+ Cj4+Pj4+IFRoZSBmaXJzdCB0ZXN0IG9yIHRocmVhZCBkcmF3cyBibHVlIGJhY2tyb3VuZCB3aXRo IGJsYWNrIGhvbGVzIG9uCj4+Pj4+IGl0Lgo+Pj4+PiBUaGVzZSBob2xlcyBhcmUgY292ZXJlZCBi eSByZWN0YW5ndWxhciwgYmx1ZSBwbGFuZXMgdGhhdCBhcmUgcGxhY2VkCj4+Pj4+IHJhbmRvbWx5 IGxpa2UgaW4gdGVzdCBjYXNlICdrbXNfcGxhbmVfbXVsdGlwbGUnLgo+Pj4+Pgo+Pj4+PiBUaGUg c2Vjb25kIHRocmVhZCBjaGFuZ2VzIHJlc29sdXRpb24gZnJvbSBoaWdoZXIgdG8gbG93ZXIgb25l IGFuZAo+Pj4+PiBiYWNrLgo+Pj4+PiBUaGUgZGVsYXkgYmV0d2VlbiByZXNvbHV0aW9uIGNoYW5n ZXMgaXMgcmFuZG9tbHkgc2VsZWN0ZWQgYmV0d2Vlbgo+Pj4+PiAyMCBhbmQKPj4+Pj4gNTAgbWls bGlzZWNvbmRzLgo+Pj4+Pgo+Pj4+PiBUaGUgdGVzdCBydW5zIGJ5IGRlZmF1bHQgMzIgaXRlcmF0 aW9ucyB0byBpbmNyZWFzZSB0aGUgY292ZXJhZ2UuCj4+Pj4+Cj4+Pj4+IHYyOiB1c2UgaWd0X2Zv cmsgaW5zdGVhZCBvZiBwdGhyZWFkcyB0byBjcmVhdGUgY29uY3VycmVudCB0ZXN0IHJ1bnMKPj4+ Pj4gKE1hYXJ0ZW4pCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IE1pa2EgS2Fob2xhIDxtaWth LmthaG9sYUBpbnRlbC5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiAgdGVzdHMvTWFrZWZpbGUuc291cmNl cyB8ICAgMSArCj4+Pj4+ICB0ZXN0cy9rbXNfY29uY3VycmVudC5jIHwgNjMwCj4+Pj4+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gIDIgZmls ZXMgY2hhbmdlZCwgNjMxIGluc2VydGlvbnMoKykKPj4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9rbXNfY29uY3VycmVudC5jCj4+Pj4+Cj4+Pj4+IDxzbmlwPgo+Pj4+PiArc3RhdGljIGlu dAo+Pj4+PiArZGlzcGxheV9jb21taXRfbW9kZShkYXRhX3QgKmRhdGEsIGlndF9jcmNfdCAqY3Jj KSB7Cj4+Pj4+ICsJY2hhciBidWZbMjU2XTsKPj4+Pj4gKwlzdHJ1Y3QgZHJtX2V2ZW50ICplID0g KHZvaWQgKilidWY7Cj4+Pj4+ICsJaW50IG4sIHJldDsKPj4+Pj4gKwlpbnQgZmxhZ3MgPSBEUk1f TU9ERV9QQUdFX0ZMSVBfRVZFTlQgfAo+Pj4+PiBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNF VCB8Cj4+IERSTV9NT0RFX0FUT01JQ19OT05CTE9DSzsKPj4+Pj4gKwo+Pj4+PiArCXJldCA9IGln dF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAo+Pj4+PiArCQkJCQkg ICAgZmxhZ3MsCj4+Pj4+ICsJCQkJCSAgICBOVUxMKTsKPj4+Pj4gKwlpZ3Rfc2tpcF9vbihyZXQg IT0gMCk7Cj4+Pj4+ICsKPj4+Pj4gKwlpZ3Rfc2V0X3RpbWVvdXQoMSwgIlN0dWNrIG9uIHBhZ2Ug ZmxpcCIpOwo+Pj4+PiArCXJldCA9IHJlYWQoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIGJ1Ziwgc2l6 ZW9mKGJ1ZikpOwo+Pj4+PiArCWlndF9hc3NlcnQocmV0ID49IDApOwo+Pj4+PiArCj4+Pj4+ICsJ aWd0X2Fzc2VydF9lcShlLT50eXBlLCBEUk1fRVZFTlRfRkxJUF9DT01QTEVURSk7Cj4+Pj4+ICsJ aWd0X3Jlc2V0X3RpbWVvdXQoKTsKPj4+Pj4gKwo+Pj4+PiArCXJldHVybiBuOwo+Pj4+PiArfQo+ Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZAo+Pj4+PiArdGVzdF9ncmFiX2NyYyhkYXRhX3QgKmRh dGEsIGNvbG9yX3QgKmNvbG9yLCBpZ3RfY3JjX3QgKmNyYyAvKiBvdXQKPj4+Pj4gKi8pCj4+Pj4+ ICt7Cj4+Pj4+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+Pj4+PiArCWlndF9wbGFuZV90ICpw cmltYXJ5Owo+Pj4+PiArCWludCByZXQ7Cj4+Pj4+ICsKPj4+Pj4gKwlpZ3Rfb3V0cHV0X3NldF9w aXBlKGRhdGEtPm91dHB1dCwgZGF0YS0+cGlwZSk7Cj4+Pj4+ICsKPj4+Pj4gKwlwcmltYXJ5ID0g aWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsCj4+Pj4+IERSTV9QTEFORV9U WVBFX1BSSU1BUlkpOwo+Pj4+PiArCWRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSA9IHByaW1h cnk7Cj4+Pj4+ICsKPj4+Pj4gKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRw dXQpOwo+Pj4+PiArCj4+Pj4+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLQo+Pj4+Pj4gdmRpc3BsYXksCj4+Pj4+ICsJCQkgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPj4+Pj4gKwkJCSAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxF RCwKPj4+Pj4gKwkJCSAgICBjb2xvci0+cmVkLCBjb2xvci0+Z3JlZW4sIGNvbG9yLT5ibHVlLAo+ Pj4+PiArCQkJICAgICZkYXRhLT5mYltwcmltYXJ5LT5pbmRleF0pOwo+Pj4+PiArCj4+Pj4+ICsJ aWd0X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0sICZkYXRhLQo+Pj4+ Pj4gZmJbcHJpbWFyeS0+aW5kZXhdKTsKPj4+Pj4gKwo+Pj4+PiArCXJldCA9IGlndF9kaXNwbGF5 X3RyeV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LAo+Pj4+PiBDT01NSVRfQVRPTUlDKTsKPj4+Pj4g KwlpZ3Rfc2tpcF9vbihyZXQgIT0gMCk7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gKy8qCj4+Pj4+ ICsgKiBNdWx0aXBsZSBwbGFuZSBwb3NpdGlvbiB0ZXN0Lgo+Pj4+PiArICogICAtIFdlIHN0YXJ0 IGJ5IGdyYWJiaW5nIGEgcmVmZXJlbmNlIENSQyBvZiBhIGZ1bGwgYmx1ZSBmYgo+Pj4+PiBiZWlu ZyBzY2FubmVkCj4+Pj4+ICsgKiAgICAgb3V0IG9uIHRoZSBwcmltYXJ5IHBsYW5lCj4+Pj4+ICsg KiAgIC0gVGhlbiB3ZSBzY2Fubm91dCBudW1iZXIgb2YgcGxhbmVzOgo+Pj4+PiArICogICAgICAq IHRoZSBwcmltYXJ5IHBsYW5lIHVzZXMgYSBibHVlIGZiIHdpdGggYSBibGFjayByZWN0YW5nbGUK Pj4+Pj4gaG9sZQo+Pj4+PiArICogICAgICAqIHBsYW5lcywgb24gdG9wIG9mIHRoZSBwcmltYXJ5 IHBsYW5lLCB3aXRoIGEgYmx1ZSBmYiB0aGF0Cj4+Pj4+IGlzIHNldC11cAo+Pj4+PiArICogICAg ICAgIHRvIGNvdmVyIHRoZSBibGFjayByZWN0YW5nbGVzIG9mIHRoZSBwcmltYXJ5IHBsYW5lIGZi Cj4+Pj4+ICsgKiAgICAgVGhlIHJlc3VsdGluZyBDUkMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0 aGUgcmVmZXJlbmNlIENSQwo+Pj4+PiArICovCj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyB2b2lkCj4+ Pj4+ICtjcmVhdGVfZmJfZm9yX21vZGVfcG9zaXRpb24oZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9k ZUluZm8gKm1vZGUsCj4+Pj4+ICsJCQkgICAgY29sb3JfdCAqY29sb3IsIGludCAqcmVjdF94LCBp bnQKPj4+Pj4gKnJlY3RfeSwKPj4+Pj4gKwkJCSAgICBpbnQgKnJlY3RfdywgaW50ICpyZWN0X2gs IHVpbnQ2NF90Cj4+Pj4+IHRpbGluZywKPj4+Pj4gKwkJCSAgICBpbnQgbWF4X3BsYW5lcykKPj4+ Pj4gK3sKPj4+Pj4gKwl1bnNpZ25lZCBpbnQgZmJfaWQ7Cj4+Pj4+ICsJY2Fpcm9fdCAqY3I7Cj4+ Pj4+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4+Pj4+ICsKPj4+Pj4gKwlwcmltYXJ5ID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsCj4+Pj4+IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOwo+Pj4+PiArCj4+Pj4+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRy bV9mZCwKPj4+Pj4gKwkJCSAgICAgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPj4+ Pj4gKwkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4+Pj4+ICsJCQkgICAgICB0aWxpbmcs Cj4+Pj4+ICsJCQkgICAgICAmZGF0YS0+ZmJbcHJpbWFyeS0+aW5kZXhdKTsKPj4+Pj4gKwlpZ3Rf YXNzZXJ0KGZiX2lkKTsKPj4+Pj4gKwo+Pj4+PiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZGF0 YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJbcHJpbWFyeS0KPj4+Pj4+IGluZGV4XSk7Cj4+Pj4+ICsJaWd0 X3BhaW50X2NvbG9yKGNyLCByZWN0X3hbMF0sIHJlY3RfeVswXSwKPj4+Pj4gKwkJCW1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPj4+Pj4gKwkJCWNvbG9yLT5yZWQsIGNvbG9yLT5ncmVl biwgY29sb3ItPmJsdWUpOwo+Pj4+PiArCj4+Pj4+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhf cGxhbmVzOyBpKyspIHsKPj4+Pj4gKwkJaWYgKGRhdGEtPnBsYW5lW2ldLT50eXBlID09Cj4+Pj4+ IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4+Pj4+ICsJCQljb250aW51ZTsKPj4+Pj4gKwkJaWd0 X3BhaW50X2NvbG9yKGNyLCByZWN0X3hbaV0sIHJlY3RfeVtpXSwKPj4+Pj4gKwkJCQlyZWN0X3db aV0sIHJlY3RfaFtpXSwgMC4wLCAwLjAsCj4+Pj4+IDAuMCk7Cj4+Pj4+ICsJfQo+Pj4+PiArCj4+ Pj4+ICsJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOwo+Pj4+PiArCWNhaXJvX2Rl c3Ryb3koY3IpOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgdm9pZAo+Pj4+PiArcHJl cGFyZV9wbGFuZXMoZGF0YV90ICpkYXRhLCBjb2xvcl90ICpjb2xvciwgaW50IG1heF9wbGFuZXMp IHsKPj4+Pj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4+Pj4+ICsJaWd0X3BpcGVfdCAqcGlw ZTsKPj4+Pj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPj4+Pj4gKwlpbnQgKng7Cj4+Pj4+ICsJ aW50ICp5Owo+Pj4+PiArCWludCAqc2l6ZTsKPj4+Pj4gKwlpbnQgaTsKPj4+Pj4gKwo+Pj4+PiAr CWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBkYXRhLT5waXBlKTsKPj4+Pj4gKwlw cmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShkYXRhLT5vdXRwdXQsCj4+Pj4+IERS TV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+Pj4+PiArCXBpcGUgPSBwcmltYXJ5LT5waXBlOwo+Pj4+ PiArCj4+Pj4+ICsJeCA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeCkpOwo+Pj4+ PiArCWlndF9hc3NlcnRfZih4LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVsZCBieXRlcyBmb3IgdmFy aWFibGUKPj4+Pj4geFxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKngp KSk7Cj4+Pj4+ICsJeSA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeSkpOwo+Pj4+ PiArCWlndF9hc3NlcnRfZih5LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVsZCBieXRlcyBmb3IgdmFy aWFibGUKPj4+Pj4geVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMgKiBzaXplb2YoKnkp KSk7Cj4+Pj4+ICsJc2l6ZSA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqc2l6ZSkp Owo+Pj4+PiArCWlndF9hc3NlcnRfZihzaXplLCAiRmFpbGVkIHRvIGFsbG9jYXRlICVsZCBieXRl cyBmb3IKPj4+Pj4gdmFyaWFibGUgc2l6ZVxuIiwgKGxvbmcgaW50KSAocGlwZS0+bl9wbGFuZXMg KiBzaXplb2YoKnNpemUpKSk7Cj4+Pj4+ICsKPj4+Pj4gKwltb2RlID0gaWd0X291dHB1dF9nZXRf bW9kZShkYXRhLT5vdXRwdXQpOwo+Pj4+PiArCj4+Pj4+ICsJLyogcGxhbmVzIHdpdGggcmFuZG9t IHBvc2l0aW9ucyAqLwo+Pj4+PiArCXhbcHJpbWFyeS0+aW5kZXhdID0gMDsKPj4+Pj4gKwl5W3By aW1hcnktPmluZGV4XSA9IDA7Cj4+Pj4+ICsJZm9yIChpID0gMDsgaSA8IG1heF9wbGFuZXM7IGkr Kykgewo+Pj4+PiArCQlpZ3RfcGxhbmVfdCAqcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShk YXRhLQo+Pj4+Pj4gb3V0cHV0LCBpKTsKPj4+Pj4gKwo+Pj4+PiArCQlpZiAocGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKPj4+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4+PiArCQll bHNlIGlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4+Pj4+ICsJCQlz aXplW2ldID0gU0laRV9DVVJTT1I7Cj4+Pj4+ICsJCWVsc2UKPj4+Pj4gKwkJCXNpemVbaV0gPSBT SVpFX1BMQU5FOwo+Pj4+PiArCj4+Pj4+ICsJCXhbaV0gPSByYW5kKCkgJSAobW9kZS0+aGRpc3Bs YXkgLSBzaXplW2ldKTsKPj4+Pj4gKwkJeVtpXSA9IHJhbmQoKSAlIChtb2RlLT52ZGlzcGxheSAt IHNpemVbaV0pOwo+Pj4+PiArCj4+Pj4+ICsJCWRhdGEtPnBsYW5lW2ldID0gcGxhbmU7Cj4+Pj4+ ICsKPj4+Pj4gKwkJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsCj4+Pj4+ICsJCQkJ ICAgIHNpemVbaV0sIHNpemVbaV0sCj4+Pj4+ICsJCQkJICAgIGRhdGEtPnBsYW5lW2ldLT50eXBl ID09Cj4+Pj4+IERSTV9QTEFORV9UWVBFX0NVUlNPUiA/IERSTV9GT1JNQVRfQVJHQjg4ODggOgo+ PiBEUk1fRk9STUFUX1hSR0I4ODg4LAo+Pj4+PiArCQkJCSAgICBkYXRhLT5wbGFuZVtpXS0+dHlw ZSA9PQo+Pj4+PiBEUk1fUExBTkVfVFlQRV9DVVJTT1IgPyBMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FIDoKPj4+Pj4gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCj4+Pj4+ICsJCQkJICAg IGNvbG9yLT5yZWQsIGNvbG9yLT5ncmVlbiwKPj4+Pj4gY29sb3ItPmJsdWUsCj4+Pj4+ICsJCQkJ ICAgICZkYXRhLT5mYltpXSk7Cj4+Pj4+ICsKPj4+Pj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlv bihkYXRhLT5wbGFuZVtpXSwgeFtpXSwKPj4+Pj4geVtpXSk7Cj4+Pj4+ICsJCWlndF9wbGFuZV9z ZXRfZmIoZGF0YS0+cGxhbmVbaV0sICZkYXRhLT5mYltpXSk7Cj4+Pj4+ICsJfQo+Pj4+PiArCj4+ Pj4+ICsJLyogcHJpbWFyeSBwbGFuZSAqLwo+Pj4+PiArCWRhdGEtPnBsYW5lW3ByaW1hcnktPmlu ZGV4XSA9IHByaW1hcnk7Cj4+Pj4+ICsJY3JlYXRlX2ZiX2Zvcl9tb2RlX3Bvc2l0aW9uKGRhdGEs IG1vZGUsIGNvbG9yLCB4LCB5LCBzaXplLAo+Pj4+PiBzaXplLAo+Pj4+PiArCQkJCSAgICBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPj4+Pj4gbWF4X3BsYW5lcyk7Cj4+Pj4+ICsJaWd0 X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtwcmltYXJ5LT5pbmRleF0sICZkYXRhLQo+Pj4+Pj4g ZmJbcHJpbWFyeS0+aW5kZXhdKTsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIHZvaWQK Pj4+Pj4gK3Rlc3RfcGxhbmVfcG9zaXRpb25fd2l0aF9vdXRwdXQoZGF0YV90ICpkYXRhKSB7Cj4+ Pj4+ICsJaWd0X2NyY190ICpjcmM7Cj4+Pj4+ICsJY29sb3JfdCBibHVlICA9IHsgMC4wZiwgMC4w ZiwgMS4wZiB9Owo+Pj4+PiArCWludCBpOwo+Pj4+PiArCWludCBpdGVyYXRpb25zID0gb3B0Lml0 ZXJhdGlvbnMgPCAxID8gMSA6IG9wdC5pdGVyYXRpb25zOwo+Pj4+PiArCWJvb2wgbG9vcF9mb3Jl dmVyOwo+Pj4+PiArCWNoYXIgaW5mb1syNTZdOwo+Pj4+PiArCWludCBtYXhfcGxhbmVzID0gZGF0 YS0+ZGlzcGxheS5waXBlc1tkYXRhLT5waXBlXS5uX3BsYW5lczsKPj4+Pj4gKwo+Pj4+PiArCWlm IChvcHQuaXRlcmF0aW9ucyA9PSBMT09QX0ZPUkVWRVIpIHsKPj4+Pj4gKwkJbG9vcF9mb3JldmVy ID0gdHJ1ZTsKPj4+Pj4gKwkJc3ByaW50ZihpbmZvLCAiZm9yZXZlciIpOwo+Pj4+PiArCX0gZWxz ZSB7Cj4+Pj4+ICsJCWxvb3BfZm9yZXZlciA9IGZhbHNlOwo+Pj4+PiArCQlzcHJpbnRmKGluZm8s ICJmb3IgJWQgJXMiLAo+Pj4+PiArCQkJaXRlcmF0aW9ucywgaXRlcmF0aW9ucyA+IDEgPyAiaXRl cmF0aW9ucyIKPj4+Pj4gOiAiaXRlcmF0aW9uIik7Cj4+Pj4+ICsJfQo+Pj4+PiArCj4+Pj4+ICsJ aWd0X2luZm8oIlRlc3RpbmcgY29ubmVjdG9yICVzIHVzaW5nIHBpcGUgJXMgd2l0aCAlZAo+Pj4+ PiBwbGFuZXMgJXMgd2l0aCBzZWVkICVkXG4iLAo+Pj4+PiArCQkgaWd0X291dHB1dF9uYW1lKGRh dGEtPm91dHB1dCksCj4+Pj4+IGttc3Rlc3RfcGlwZV9uYW1lKGRhdGEtPnBpcGUpLCBtYXhfcGxh bmVzLAo+Pj4+PiArCQkgaW5mbywgb3B0LnNlZWQpOwo+Pj4+PiArCj4+Pj4+ICsJaSA9IDA7Cj4+ Pj4+ICsJd2hpbGUgKGkgPCBpdGVyYXRpb25zIHx8IGxvb3BfZm9yZXZlcikgewo+Pj4+PiArCQlw cmVwYXJlX3BsYW5lcyhkYXRhLCAmYmx1ZSwgbWF4X3BsYW5lcyk7Cj4+Pj4+ICsKPj4+Pj4gKwkJ ZGlzcGxheV9jb21taXRfbW9kZShkYXRhLCBjcmMpOwo+Pj4+PiArCj4+Pj4+ICsJCWkrKzsKPj4+ Pj4gKwl9Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBkcm1Nb2RlQ29ubmVjdG9yICoK Pj4+Pj4gK2dldF9jb25uZWN0b3JfY29ubmVjdGVkKGludCBkcm1fZmQpIHsKPj4+Pj4gKwlkcm1N b2RlUmVzICpyZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRybV9mZCk7Cj4+Pj4+ICsJ ZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+Pj4+PiArCWludCBpOwo+Pj4+PiArCj4+Pj4+ ICsJZm9yIChpID0gMDsgaSA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Cj4+ Pj4+ICsJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLAo+Pj4+PiArCQkJ CQkJcmVzb3VyY2VzLQo+Pj4+Pj4gY29ubmVjdG9yc1tpXSk7Cj4+Pj4+ICsKPj4+Pj4gKwkJaWYg KGNvbm5lY3Rvci0+Y29ubmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQpCj4+Pj4+ICsJCQli cmVhazsKPj4+Pj4gKwo+Pj4+PiArCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ Pj4+PiArCQljb25uZWN0b3IgPSBOVUxMOwo+Pj4+PiArCX0KPj4+Pj4gKwo+Pj4+PiArCWRybU1v ZGVGcmVlUmVzb3VyY2VzKHJlc291cmNlcyk7Cj4+Pj4+ICsKPj4+Pj4gKwlyZXR1cm4gY29ubmVj dG9yOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgaW50IGdldF9jcnRjX2Zvcl9lbmNv ZGVyKGRybU1vZGVSZXMgKnJlc291cmNlcywKPj4+Pj4gKwkJCQlkcm1Nb2RlRW5jb2RlciAqZW5j b2RlcikKPj4+Pj4gK3sKPj4+Pj4gKwlpbnQgbWFzaywgaWQ7Cj4+Pj4+ICsJaW50IGk7Cj4+Pj4+ ICsJYm9vbCBmb3VuZDsKPj4+Pj4gKwo+Pj4+PiArCWZvciAoaSA9IDA7IGkgPCByZXNvdXJjZXMt PmNvdW50X2NydGNzOyBpKyspIHsKPj4+Pj4gKwkJbWFzayA9IDEgPDwgaTsKPj4+Pj4gKwkJaWQg PSByZXNvdXJjZXMtPmNydGNzW2ldOwo+Pj4+PiArCj4+Pj4+ICsJCWZvdW5kID0gZW5jb2Rlci0+ cG9zc2libGVfY3J0Y3MgJiBtYXNrOwo+Pj4+PiArCQlpZiAoZm91bmQpCj4+Pj4+ICsJCQlicmVh azsKPj4+Pj4gKwl9Cj4+Pj4+ICsKPj4+Pj4gKwlpZiAoIWZvdW5kKQo+Pj4+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4+Pj4gKwo+Pj4+PiArCXJldHVybiBpZDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+ PiArc3RhdGljIGludCBnZXRfY3J0Y19mb3JfY29ubmVjdG9yKGludCBkcm1fZmQsIGRybU1vZGVS ZXMKPj4+Pj4gKnJlc291cmNlcywKPj4+Pj4gKwkJCQkgIGRybU1vZGVDb25uZWN0b3IgKmNvbm5l Y3RvcikKPj4+Pj4gK3sKPj4+Pj4gKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPj4+Pj4gKwlp bnQgZW5jb2Rlcl9pZDsKPj4+Pj4gKwlpbnQgY3J0Y19pZDsKPj4+Pj4gKwlpbnQgaTsKPj4+Pj4g Kwo+Pj4+PiArCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3ItPmNvdW50X2VuY29kZXJzOyBpKysp IHsKPj4+Pj4gKwkJZW5jb2Rlcl9pZCA9IGNvbm5lY3Rvci0+ZW5jb2RlcnNbaV07Cj4+Pj4+ICsJ CWVuY29kZXIgPSBkcm1Nb2RlR2V0RW5jb2Rlcihkcm1fZmQsIGVuY29kZXJfaWQpOwo+Pj4+PiAr Cj4+Pj4+ICsJCWlmIChlbmNvZGVyKSB7Cj4+Pj4+ICsJCQljcnRjX2lkID0gZ2V0X2NydGNfZm9y X2VuY29kZXIocmVzb3VyY2VzLAo+Pj4+PiBlbmNvZGVyKTsKPj4+Pj4gKwo+Pj4+PiArCQkJZHJt TW9kZUZyZWVFbmNvZGVyKGVuY29kZXIpOwo+Pj4+PiArCj4+Pj4+ICsJCQlpZiAoY3J0Y19pZCAh PSAwKQo+Pj4+PiArCQkJCWJyZWFrOwo+Pj4+PiArCQl9Cj4+Pj4+ICsJfQo+Pj4+PiArCj4+Pj4+ ICsJaWYgKGNydGNfaWQgPT0gMCkKPj4+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+ICsKPj4+ Pj4gKwlyZXR1cm4gY3J0Y19pZDsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArc3RhdGljIGludCBn ZXRfY3J0YyhpbnQgZHJtX2ZkKQo+Pj4+PiArewo+Pj4+PiArCWRybU1vZGVSZXMgKnJlc291cmNl czsKPj4+Pj4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4+Pj4+ICsJZHJtTW9kZUVu Y29kZXIgKmVuY29kZXI7Cj4+Pj4+ICsJaW50IGksIGlkOwo+Pj4+PiArCj4+Pj4+ICsJcmVzb3Vy Y2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+Pj4+PiArCWNvbm5lY3RvciA9IGdl dF9jb25uZWN0b3JfY29ubmVjdGVkKGRybV9mZCk7Cj4+Pj4+ICsKPj4+Pj4gKwlmb3IgKGkgPSAw OyBpIDwgcmVzb3VyY2VzLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7Cj4+Pj4+ICsJCWVuY29kZXIg PSBkcm1Nb2RlR2V0RW5jb2Rlcihkcm1fZmQsIHJlc291cmNlcy0KPj4+Pj4+IGVuY29kZXJzW2ld KTsKPj4+Pj4gKwo+Pj4+PiArCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBjb25uZWN0b3It PmVuY29kZXJfaWQpCj4+Pj4+ICsJCQlicmVhazsKPj4+Pj4gKwo+Pj4+PiArCQlkcm1Nb2RlRnJl ZUVuY29kZXIoZW5jb2Rlcik7Cj4+Pj4+ICsJCWVuY29kZXIgPSBOVUxMOwo+Pj4+PiArCX0KPj4+ Pj4gKwo+Pj4+PiArCWlmIChlbmNvZGVyKQo+Pj4+PiArCQlyZXR1cm4gZW5jb2Rlci0+Y3J0Y19p ZDsKPj4+Pj4gKwo+Pj4+PiArCWlkID0gZ2V0X2NydGNfZm9yX2Nvbm5lY3Rvcihkcm1fZmQsIHJl c291cmNlcywgY29ubmVjdG9yKTsKPj4+Pj4gKwlpZ3RfYXNzZXJ0KGlkICE9IDApOwo+Pj4+PiAr Cj4+Pj4+ICsJcmV0dXJuIGlkOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ICtzdGF0aWMgZHJtTW9k ZU1vZGVJbmZvICoKPj4+Pj4gK2dldF9sb3dyZXNfbW9kZShkYXRhX3QgKmRhdGEsIGRybU1vZGVN b2RlSW5mbyAqbW9kZV9kZWZhdWx0KSB7Cj4+Pj4+ICsJZHJtTW9kZVJlcyAqcmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOwo+Pj4+PiArCWRybU1vZGVNb2RlSW5m byBzdGRfMTAyNF9tb2RlID0gewo+Pj4+PiArCQkuY2xvY2sgPSA2NTAwMCwKPj4+Pj4gKwkJLmhk aXNwbGF5ID0gMTAyNCwKPj4+Pj4gKwkJLmhzeW5jX3N0YXJ0ID0gMTA0OCwKPj4+Pj4gKwkJLmhz eW5jX2VuZCA9IDExODQsCj4+Pj4+ICsJCS5odG90YWwgPSAxMzQ0LAo+Pj4+PiArCQkuaHNrZXcg PSAwLAo+Pj4+PiArCQkudmRpc3BsYXkgPSA3NjgsCj4+Pj4+ICsJCS52c3luY19zdGFydCA9IDc3 MSwKPj4+Pj4gKwkJLnZzeW5jX2VuZCA9IDc3NywKPj4+Pj4gKwkJLnZ0b3RhbCA9IDgwNiwKPj4+ Pj4gKwkJLnZzY2FuID0gMCwKPj4+Pj4gKwkJLnZyZWZyZXNoID0gNjAsCj4+Pj4+ICsJCS5mbGFn cyA9IDB4QSwKPj4+Pj4gKwkJLnR5cGUgPSAweDQwLAo+Pj4+PiArCQkubmFtZSA9ICJDdXN0b20g MTAyNHg3NjgiLAo+Pj4+PiArCX07Cj4+Pj4+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+Pj4+ PiArCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPj4+Pj4gKwlib29sIGZvdW5kOwo+Pj4+ PiArCWludCBsaW1pdCA9IG1vZGVfZGVmYXVsdC0+dmRpc3BsYXktU0laRV9QTEFORTsKPj4+Pj4g KwlpbnQgaSwgajsKPj4+Pj4gKwo+Pj4+PiArCWlmICghcmVzb3VyY2VzKSB7Cj4+Pj4+ICsJCWln dF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsCj4+Pj4+IHN0cmVycm9y KGVycm5vKSk7Cj4+Pj4+ICsJCXJldHVybiBtb2RlOwo+Pj4+PiArCX0KPj4+Pj4gKwo+Pj4+PiAr CWZvdW5kID0gZmFsc2U7Cj4+Pj4+ICsJZm9yIChpID0gMDsgaSA8IHJlc291cmNlcy0+Y291bnRf Y29ubmVjdG9yczsgaSsrKSB7Cj4+Pj4+ICsKPj4+Pj4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdl dENvbm5lY3RvckN1cnJlbnQoZGF0YS0KPj4+Pj4+IGRybV9mZCwKPj4+Pj4gKwkJCQkJCSAgICAg ICByZXNvdXJjZXMtCj4+Pj4+PiBjb25uZWN0b3JzW2ldKTsKPj4+Pj4gKwo+Pj4+PiArCQlpZiAo IWNvbm5lY3Rvcikgewo+Pj4+PiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29ubmVjdG9y ICVpOgo+Pj4+PiAlc1xuIiwKPj4+Pj4gKwkJCQkgcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLAo+ Pj4+PiBzdHJlcnJvcihlcnJubykpOwo+Pj4+PiArCQkJY29udGludWU7Cj4+Pj4+ICsJCX0KPj4+ Pj4gKwo+Pj4+PiArCQlpZiAoIWNvbm5lY3Rvci0+Y291bnRfbW9kZXMpCj4+Pj4+ICsJCQljb250 aW51ZTsKPj4+Pj4gKwo+Pj4+PiArCQlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9t b2RlczsgaisrKSB7Cj4+Pj4+ICsJCQltb2RlID0gJmNvbm5lY3Rvci0+bW9kZXNbal07Cj4+Pj4+ ICsKPj4+Pj4gKwkJCWlmIChtb2RlLT52ZGlzcGxheSA8IGxpbWl0KSB7Cj4+Pj4+ICsJCQkJZm91 bmQgPSB0cnVlOwo+Pj4+PiArCQkJCWJyZWFrOwo+Pj4+PiArCQkJfQo+Pj4+PiArCQl9Cj4+Pj4+ ICsKPj4+Pj4gKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPj4+Pj4gKwl9Cj4+ Pj4+ICsKPj4+Pj4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhyZXNvdXJjZXMpOwo+Pj4+PiArCj4+ Pj4+ICsJaWYgKCFmb3VuZCkKPj4+Pj4gKwkJbW9kZSA9ICZzdGRfMTAyNF9tb2RlOwo+Pj4+PiAr Cj4+Pj4+ICsJcmV0dXJuIG1vZGU7Cj4+Pj4+ICt9Cj4+Pj4gU3RpbGwgbm90IGNvbXBsZXRlbHkg aGFwcHkgYWJvdXQgdGhpcyBwYXJ0Lgo+Pj4+Cj4+Pj4gSSB3b3VsZCBsb29rIGF0IGRhdGEtPm91 dHB1dC0+Y29uZmlnLmNvbm5lY3RvciBmb3IgbW9kZXMsIGFuZCByZXR1cm4KPj4+PiAxMDI0IG1v ZGUgaWYgbm90aGluZydzIGZvdW5kLgo+Pj4+Cj4+Pj4gU2F2ZXMgYSB3aG9sZSBsb3Qgb2YgZHJt IGNhbGxzLgo+Pj4gVHJ1ZS4gQSBsb3Qgb2YgbGluZXMgY2FuIGJlIGNsZWFuZWQgb3V0Lgo+Pj4+ PiArc3RhdGljIHZvaWQKPj4+Pj4gK3Rlc3RfcmVzb2x1dGlvbl93aXRoX291dHB1dChkYXRhX3Qg KmRhdGEpIHsKPj4+Pj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGVfaGksICptb2RlX2xvOwo+Pj4+ PiArCWludCByZXQ7Cj4+Pj4+ICsJaW50IGl0ZXJhdGlvbnMgPSBvcHQuaXRlcmF0aW9ucyA8IDEg PyAxIDogb3B0Lml0ZXJhdGlvbnM7Cj4+Pj4+ICsJYm9vbCBsb29wX2ZvcmV2ZXI7Cj4+Pj4+ICsJ aW50IGk7Cj4+Pj4+ICsKPj4+Pj4gKwlpZiAob3B0Lml0ZXJhdGlvbnMgPT0gTE9PUF9GT1JFVkVS KQo+Pj4+PiArCQlsb29wX2ZvcmV2ZXIgPSB0cnVlOwo+Pj4+PiArCWVsc2UKPj4+Pj4gKwkJbG9v cF9mb3JldmVyID0gZmFsc2U7Cj4+Pj4+ICsKPj4+Pj4gKwlpZ3RfaW5mbygiVGVzdGluZyByZXNv bHV0aW9uIHdpdGggY29ubmVjdG9yICVzIHVzaW5nIHBpcGUKPj4+Pj4gJXMgd2l0aCBzZWVkICVk XG4iLAo+Pj4+PiArCQkgaWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCksCj4+Pj4+IGttc3Rl c3RfcGlwZV9uYW1lKGRhdGEtPnBpcGUpLCBvcHQuc2VlZCk7Cj4+Pj4+ICsKPj4+Pj4gKwltb2Rl X2hpID0gaWd0X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRwdXQpOwo+Pj4+PiArCW1vZGVfbG8g PSBnZXRfbG93cmVzX21vZGUoZGF0YSwgbW9kZV9oaSk7Cj4+Pj4+ICsKPj4+Pj4gKwlpID0gMDsK Pj4+Pj4gKwl3aGlsZSAoaSA8IGl0ZXJhdGlvbnMgfHwgbG9vcF9mb3JldmVyKSB7Cj4+Pj4+ICsJ CS8qIHN3aXRjaCB0byBsb3dlciByZXNvbHV0aW9uICovCj4+Pj4+ICsJCXJldCA9IGRybU1vZGVT ZXRDcnRjKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZCwKPj4+Pj4gZGF0YS0+ZmItPmZiX2lk LCAwLCAwLAo+Pj4+PiArCQkJCSAgICAgJmRhdGEtPmNvbm5lY3Rvcl9pZCwgMSwKPj4+Pj4gbW9k ZV9sbyk7Cj4+Pj4+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPj4+Pj4gKwo+Pj4+PiArCQkv KiBzd2l0Y2ggYmFjayB0byBoaWdoZXIgcmVzb2x1dGlvbiAqLwo+Pj4+PiArCQlyZXQgPSBkcm1N b2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWQsCj4+Pj4+IGRhdGEtPmZiLT5m Yl9pZCwgMCwgMCwKPj4+Pj4gKwkJCQkgICAgICZkYXRhLT5jb25uZWN0b3JfaWQsIDEsCj4+Pj4+ IG1vZGVfaGkpOwo+Pj4+PiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4+Pj4+ICsKPj4+Pj4g KwkJaSsrOwo+Pj4+PiArCX0KPj4+Pj4gK30KPj4+PiBVc2UgaWd0X291dHB1dF9vdmVycmlkZV9t b2RlICsgaWd0X2Rpc3BsYXkgY2FsbHM/IFdpdGggdGhlIHRocmVhZAo+Pj4+IGJlaW5nIGEgZm9y ayBub3csIHlvdSBjYW4gdXNlIGlndF9kaXNwbGF5LiA6KQo+Pj4gRm9yIHNvbWUgcmVhc29uIEkg a2VlcCByZWNlaXZpbmcgYW4gZXJyb3Igd2hlbiB1c2luZwo+Pj4gaWd0X291dHB1dF9vdmVycmlk ZV9tb2RlICsgaWd0X2Rpc3BsYXkgY2FsbHMuIFRoZSBlcnJvciBpcwo+Pj4KPj4+IGlndC1rbXMt Q1JJVElDQUw6IEZhaWxlZCBhc3NlcnRpb246Cj4+PiBkcm1Nb2RlRGVzdHJveVByb3BlcnR5Qmxv YihkaXNwbGF5LQo+Pj4+IGRybV9mZCwgKmJsb2IpID09IDAKPj4+IGlndC1rbXMtQ1JJVElDQUw6 IExhc3QgZXJybm86IDEsIE9wZXJhdGlvbiBub3QgcGVybWl0dGVkCj4+Pgo+Pj4gTWF5YmUgYm90 aCB0aHJlYWRzIHRyeSB0byBhY2Nlc3MgdGhpcyBhbmQgdGhpcyByZXF1ZXN0IGlzIG5vdCBncmFu dGVkPwo+Pj4gV2l0aCBkcm1Nb2RlU2V0Q3J0YygpIGNhbGwgSSBkb24ndCBzZWUgdGhpcyBiZWhh dmlvci4gTWF5YmUgc3RpY2sgd2l0aAo+Pj4gcmF3IGNhbGxzIGluc3RlYWQ/Cj4+IGRhdGEtPmRp c3BsYXkucGlwZXNbcGlwZV0ubW9kZV9ibG9iID0gMDsgaW4gb25lIG9mIHRoZSBmb3JrcyBvZiB0 aGUgdGVzdCBzaG91bGQKPj4gZml4IGl0Lgo+IFRoaXMgc2VlbXMgdG8gZml4IHRoZSBpc3N1ZS4g SSdsbCB0aHJvdyBhIHJldmlzZWQgcGF0Y2ggb2YgdGhlIHRlc3Qgc2hvcnRseS4KPgo+PiAtRVBF Uk0gbWVhbnMgdGhhdCB0aGUgYmxvYiB3YXMgYWxyZWFkeSBkZXN0cm95ZWQgYnkgdGhpcyBmZCwg YnV0IHN0aWxsIHVzZWQKPj4gZ2xvYmFsbHkuCj4+Cj4+IGttc19ybWZiIGRvZXMgc2ltaWxhciwg bWF5YmUgd2Ugc2hvdWxkIGlnbm9yZSBmYWlsdXJlcz8KPiBNYXliZSB3ZSBjb3VsZCBpZ25vcmUg dGhlc2UgZmFpbHVyZXMuIEFueSBoYXJtIGRvbmUgZWxzZXdoZXJlIGlmIHdlIGRvIHNvPwoKSSdt IGhlc2l0YW50IHRvIGlnbm9yZSB0aGVtLCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGNhbGxpbmcg ZnJlZSgpIHR3aWNlIGlzIGEgYmFkIGlkZWEsIHdlIG1heSBlbmQgdXAgZnJlZWluZyBhIGRpZmZl cmVudCB1bmtub3duIGJsb2IuCgp+TWFhcnRlbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==