From octave-maintainers-request at bevo dot che dot wisc dot edu Wed Nov 15 08:53:51 2000 Subject: new set functions From: "Lippert, Ross A." To: "'octave-maintainers at octave dot org'" Date: Wed, 15 Nov 2000 09:52:44 -0500 This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C04F13.CAD58E20 Content-Type: text/plain; charset="iso-8859-1" I have made a modification to create_set because I found myself often wanting not just the set of unique elements but also the counts of those elements in the original input. Perhaps that is just my own eccentricity. However, if one modifies create_set in this way (returning a second output of counts), then I believe that the runtime complexity of intersection and complement can be reduced to n log n instead of n^2 (which they appear to be now, but I am no expert on complexity). Anyhow, as a quick example I tried x = fix(20000*rand(1000,1)); y = fix(20000*rand(1000,1)); and found a big difference between the timings of intersection(x,y), so I think I am on the right track. I'd be sending this out in the form of a patch, but for the moment, I'd really like feedback to tell me if I have done something stupid so I don't waste time updating my CVS, installing the new scripts and then diffing all to find out I missed something. -r ------_=_NextPart_000_01C04F13.CAD58E20 Content-Type: application/octet-stream; name="set.tgz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="set.tgz" c2V0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDc1NSAAMzEwNjU3 IAAwMDE3NTIgADAwMDAwMDAwMDAwIDA3MjA0NTIwMjcxIDAxMjU2MCAANQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHJpcHBlcgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAc2NpZW5jZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAw MCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz ZXQvdW5pb24ubQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAzMTA2NTcg ADAwMTc1MiAAMDAwMDAwMDI3NDEgMDcyMDQ1MTcyNjQgMDE0MTYxIAAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwcmlwcGVyAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABzY2llbmNlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAw IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMj IENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBKb2huIFcuIEVhdG9uDQojIw0KIyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgT2N0YXZlLg0KIyMNCiMjIE9jdGF2ZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQojIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KIyMgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIg b3B0aW9uKQ0KIyMgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgT2N0YXZlIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KIyMgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMjDQoj IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KIyMgYWxvbmcgd2l0aCBPY3RhdmU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAg SWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQ0KIyMgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVt cGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BDQojIyAwMjExMS0xMzA3LCBVU0EuDQoN CiMjIC0qLSB0ZXhpbmZvIC0qLQ0KIyMgQGRlZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0ge30gdW5p b24gKEB2YXJ7eH0sIEB2YXJ7eX0pDQojIyBSZXR1cm4gdGhlIHNldCBvZiBlbGVtZW50cyB0aGF0 IGFyZSBpbiBlaXRoZXIgb2YgdGhlIHNldHMgQHZhcnt4fSBhbmQNCiMjIEB2YXJ7eX0uICBGb3Ig ZXhhbXBsZSwNCiMjDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyB1bmlvbiAoWyAxLCAyLCA0 IF0sIFsgMiwgMywgNSBdKQ0KIyMgICAgICBAcmVzdWx0e30gWyAxLCAyLCAzLCA0LCA1IF0NCiMj IEBlbmQgZ3JvdXANCiMjIEBlbmQgZXhhbXBsZQ0KIyMgQGVuZCBkZWZ0eXBlZm4NCiMjIEBzZWVh bHNve2NyZWF0ZV9zZXQsIGludGVyc2VjdGlvbiwgYW5kIGNvbXBsZW1lbnR9DQoNCiMjIEF1dGhv cjogandlDQoNCmZ1bmN0aW9uIHkgPSB1bmlvbihhLGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0K ICAgIHVzYWdlICgidW5pb24oYSxiKSIpOw0KICBlbmRpZg0KDQogIGlmKGlzZW1wdHkoYSkpDQog ICAgeSA9IGNyZWF0ZV9zZXQoYik7DQogIGVsc2VpZihpc2VtcHR5KGIpKQ0KICAgIHkgPSBjcmVh dGVfc2V0KGEpOw0KICBlbHNlDQogICAgW25yYSwgbmNhXSA9IHNpemUoYSk7DQogICAgYSA9IHJl c2hhcGUoYSwxLG5yYSpuY2EpOw0KICAgIFtucmIsIG5jYl0gPSBzaXplKGIpOw0KICAgIGIgPSBy ZXNoYXBlKGIsMSxucmIqbmNiKTsNCiAgICB5ID0gY3JlYXRlX3NldChbYSwgYl0pOw0KICBlbmRp Zg0KDQplbmRmdW5jdGlvbg0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNldC9jb21w bGVtZW50Lm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADMxMDY1NyAAMDAxNzUy IAAwMDAwMDAwMzI0MCAwNzIwNDUyMDIyNyAwMTUxNjAgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByaXBwZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHNjaWVuY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMgQ29weXJp Z2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24NCiMjDQojIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBPY3RhdmUuDQojIw0KIyMgT2N0YXZlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCiMjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p DQojIyBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMjDQojIyBPY3RhdmUgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQojIyBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K IyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyMNCiMjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlDQojIyBhbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlDQojIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUENCiMjIDAyMTExLTEzMDcsIFVTQS4NCg0KIyMgLSot IHRleGluZm8gLSotDQojIyBAZGVmdHlwZWZuIHtGdW5jdGlvbiBGaWxlfSB7fSBjb21wbGVtZW50 IChAdmFye3h9LCBAdmFye3l9KQ0KIyMgUmV0dXJuIHRoZSBlbGVtZW50cyBvZiBzZXQgQHZhcnt5 fSB0aGF0IGFyZSBub3QgaW4gc2V0IEB2YXJ7eH0uICBGb3INCiMjIGV4YW1wbGUsDQojIw0KIyMg QGV4YW1wbGUNCiMjIEBncm91cA0KIyMgY29tcGxlbWVudCAoWyAxLCAyLCAzIF0sIFsgMiwgMywg NSBdKQ0KIyMgICAgICBAcmVzdWx0e30gNQ0KIyMgQGVuZCBncm91cA0KIyMgQGVuZCBleGFtcGxl DQojIyBAZW5kIGRlZnR5cGVmbg0KIyMgQHNlZWFsc297Y3JlYXRlX3NldCwgdW5pb24sIGFuZCBp bnRlcnNlY3Rpb259DQoNCiMjIEF1dGhvcjogandlDQojIyBNb2RpZmllZDogUm9zcyBMaXBwZXJ0 IFdlZCBOb3YgMTUgMDk6MzI6MzEgRVNUIDIwMDANCg0KZnVuY3Rpb24geSA9IGNvbXBsZW1lbnQg KGEsIGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0KICAgIHVzYWdlICgiY29tcGxlbWVudChhLGIp Iik7DQogIGVuZGlmDQoNCiAgaWYgKGlzZW1wdHkgKGEpKQ0KICAgIHkgPSBjcmVhdGVfc2V0ICAo Yik7DQogIGVsc2VpZiAoaXNlbXB0eSAoYikpDQogICAgeSA9IFtdOw0KICBlbHNlDQojIyB3aHkg Y2FuJ3Qgd2UganVzdCBhc3N1bWUgYSBhbmQgYiBhcmUgYWxyZWFkeSBzZXRzPyAgV2h5IGNhbid0 DQojIyB0aGF0IGJlIGEgcmVxdWlyZW1lbnQgb2YgaW50ZXJzZWN0aW9uPyAgIC1Sb3NzDQogICAg YSA9IGNyZWF0ZV9zZXQgKGEpOw0KICAgIGIgPSBjcmVhdGVfc2V0IChiKTsNCiMgSXMgZG91Ymxp bmcgdXAgb24gYSBoZXJlIHRoZSByaWdodCBpZGVhIG9yIGp1c3QgYSBzaGFtZWZ1bCBoYWNrPyAt Ug0KICAgIFt5LGNdID0gY3JlYXRlX3NldCAoW2EgYSBiXSk7DQogICAgeSA9IHkoZmluZChjPT0x KSk7DQogIGVuZGlmDQoNCmVuZGZ1bmN0aW9uDQoNCg0KDQoNCg0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNldC9jcmVh dGVfc2V0Lm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADMxMDY1NyAAMDAxNzUy IAAwMDAwMDAwMzYzMSAwNzIwNDUyMDA0MSAwMTUxMzEgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByaXBwZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHNjaWVuY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMgQ29weXJp Z2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24NCiMjDQojIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBPY3RhdmUuDQojIw0KIyMgT2N0YXZlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCiMjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p DQojIyBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMjDQojIyBPY3RhdmUgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQojIyBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K IyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyMNCiMjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlDQojIyBhbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlDQojIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUENCiMjIDAyMTExLTEzMDcsIFVTQS4NCg0KIyMgLSot IHRleGluZm8gLSotDQojIyBAZGVmdHlwZWZuIHtGdW5jdGlvbiBGaWxlfSB7fSBjcmVhdGVfc2V0 IChAdmFye3h9KQ0KIyMgUmV0dXJuIGEgcm93IHZlY3RvciBjb250YWluaW5nIHRoZSB1bmlxdWUg dmFsdWVzIGluIEB2YXJ7eH0sIHNvcnRlZCBpbg0KIyMgYXNjZW5kaW5nIG9yZGVyLiAgUmV0dXJu cyBhIHJvdyB2ZWN0b3IgY29udGFpbmluZyB0aGUgZnJlcXVlbmNpZXMgb2YNCiMjIHRob3NlIHZh bHVlcyBpbiBAdmFye3h9IGluIGEgc2Vjb25kIGFyZ3VtZW50LiAgRm9yIGV4YW1wbGUsDQojIw0K IyMgQGV4YW1wbGUNCiMjIEBncm91cA0KIyMgY3JlYXRlX3NldCAoWyAxLCAyOyAzLCA0OyA0LCAy IF0pDQojIyAgICAgIEByZXN1bHR7fSBbIDEsIDIsIDMsIDQgXQ0KIyMgQGVuZCBncm91cA0KIyMg QGVuZCBleGFtcGxlDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyBbcyxjXSA9IGNyZWF0ZV9z ZXQgKFsgMSwgMjsgMywgNDsgNCwgMiBdKQ0KIyMgICAgICBAcmVzdWx0e30gcyA9IFsgMSwgMiwg MywgNCBdDQojIyAgICAgIEByZXN1bHR7fSBjID0gWyAxLCAyLCAxLCAyIF0NCiMjIEBlbmQgZ3Jv dXANCiMjIEBlbmQgZXhhbXBsZQ0KIyMgQGVuZCBkZWZ0eXBlZm4NCiMjIEBzZWVhbHNve3VuaW9u LCBpbnRlcnNlY3Rpb24sIGFuZCBjb21wbGVtZW50fQ0KDQojIyBBdXRob3I6IGp3ZQ0KIyMgTW9k aWZpZWQ6IFJvc3MgTGlwcGVydCBXZWQgTm92IDE1IDA5OjMyOjMxIEVTVCAyMDAwDQoNCmZ1bmN0 aW9uIFt5LGNdID0gY3JlYXRlX3NldCh4KQ0KDQogIGlmIChuYXJnaW4gIT0gMSkNCiAgICB1c2Fn ZSAoImNyZWF0ZV9zZXQoeCkiKTsNCiAgZW5kaWYNCg0KICBpZiAoaXNlbXB0eSh4KSkNCiAgICB5 ID0gW107DQogICAgaWYgKG5hcmdvdXQ+MSkgDQogICAgICBjID0gW107DQogICAgZW5kaWYNCiAg ZWxzZQ0KICAgIFtucngsIG5jeF0gPSBzaXplICh4KTsNCiAgICBuZWx4ID0gbnJ4ICogbmN4Ow0K ICAgIHkgPSBzb3J0IChyZXNoYXBlICh4LCAxLCBuZWx4KSk7DQogICAgaWYgKG5lbHg9PTEpDQog ICAgICBjID0gMTsNCiAgICBlbHNlDQogICAgICBjID0gW2ZpbmQgKHkoMTpuZWx4LTEpICE9IHko MjpuZWx4KSkgbmVseF07DQogICAgZW5kaWYNCiAgICB5ID0geShjKTsNCiAgICBpZiAobmFyZ291 dD4xKQ0KICAgICAgYyA9IGRpZmYoWzAgY10pOw0KICAgIGVuZGlmDQogIGVuZGlmDQoNCmVuZGZ1 bmN0aW9uDQoNCg0KDQoNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABzZXQvaW50ZXJzZWN0aW9uLm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAz MTA2NTcgADAwMTc1MiAAMDAwMDAwMDMwNzQgMDcyMDQ1MjAyMTAgMDE1NTIwIAAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwcmlwcGVyAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABzY2llbmNlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAA MDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAACMjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBKb2huIFcuIEVhdG9uDQojIw0KIyMgVGhp cyBmaWxlIGlzIHBhcnQgb2YgT2N0YXZlLg0KIyMNCiMjIE9jdGF2ZSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQojIyB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0K IyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0 IHlvdXIgb3B0aW9uKQ0KIyMgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgT2N0YXZlIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KIyMgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K IyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N CiMjDQojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQ0KIyMgYWxvbmcgd2l0aCBPY3RhdmU7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQ0KIyMgU29mdHdhcmUgRm91bmRhdGlvbiwg NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BDQojIyAwMjExMS0xMzA3LCBV U0EuDQoNCiMjIC0qLSB0ZXhpbmZvIC0qLQ0KIyMgQGRlZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0g e30gaW50ZXJzZWN0aW9uIChAdmFye3h9LCBAdmFye3l9KQ0KIyMgUmV0dXJuIHRoZSBzZXQgb2Yg ZWxlbWVudHMgdGhhdCBhcmUgaW4gYm90aCBzZXRzIEB2YXJ7eH0gYW5kIEB2YXJ7eX0uDQojIyBG b3IgZXhhbXBsZSwNCiMjDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyBpbnRlcnNlY3Rpb24g KFsgMSwgMiwgMyBdLCBbIDIsIDMsIDUgXSkNCiMjICAgICAgQHJlc3VsdHt9IFsgMiwgMyBdDQoj IyBAZW5kIGdyb3VwDQojIyBAZW5kIGV4YW1wbGUNCiMjIEBlbmQgZGVmdHlwZWZuDQojIyBAc2Vl YWxzb3tjcmVhdGVfc2V0LCB1bmlvbiwgYW5kIGNvbXBsZW1lbnR9DQoNCiMjIEF1dGhvcjogandl DQojIyBNb2RpZmllZDogUm9zcyBMaXBwZXJ0IFdlZCBOb3YgMTUgMDk6MzI6MzEgRVNUIDIwMDAN Cg0KZnVuY3Rpb24geSA9IGludGVyc2VjdGlvbihhLGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0K ICAgIHVzYWdlICgiaW50ZXJzZWN0aW9uKGEsYikiKTsNCiAgZW5kaWYNCg0KICBpZihpc2VtcHR5 KGEpIHx8IGlzZW1wdHkoYikpDQogICAgeSA9IFtdOw0KICAgIHJldHVybjsNCiAgZW5kaWYNCg0K IyMgd2h5IGNhbid0IHdlIGp1c3QgYXNzdW1lIGEgYW5kIGIgYXJlIGFscmVhZHkgc2V0cz8gIFdo eSBjYW4ndA0KIyMgdGhhdCBiZSBhIHJlcXVpcmVtZW50IG9mIGludGVyc2VjdGlvbj8gICAtUm9z cw0KICBhID0gY3JlYXRlX3NldChhKTsNCiAgYiA9IGNyZWF0ZV9zZXQoYik7DQoNCiAgW3ksY10g PSBjcmVhdGVfc2V0KFthIGJdKTsNCiAgeSA9IHkoZmluZChjPT0yKSk7DQoNCmVuZGZ1bmN0aW9u DQoNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMj IENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBKb2huIFcuIEVhdG9uDQojIw0KIyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgT2N0YXZlLg0KIyMNCiMjIE9jdGF2ZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQojIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KIyMgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIg b3B0aW9uKQ0KIyMgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgT2N0YXZlIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KIyMgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMjDQoj IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KIyMgYWxvbmcgd2l0aCBPY3RhdmU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAg SWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQ0KIyMgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVt cGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BDQojIyAwMjExMS0xMzA3LCBVU0EuDQoN CiMjIC0qLSB0ZXhpbmZvIC0qLQ0KIyMgQGRlZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0ge30gdW5p b24gKEB2YXJ7eH0sIEB2YXJ7eX0pDQojIyBSZXR1cm4gdGhlIHNldCBvZiBlbGVtZW50cyB0aGF0 IGFyZSBpbiBlaXRoZXIgb2YgdGhlIHNldHMgQHZhcnt4fSBhbmQNCiMjIEB2YXJ7eX0uICBGb3Ig ZXhhbXBsZSwNCiMjDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyB1bmlvbiAoWyAxLCAyLCA0 IF0sIFsgMiwgMywgNSBdKQ0KIyMgICAgICBAcmVzdWx0e30gWyAxLCAyLCAzLCA0LCA1IF0NCiMj IEBlbmQgZ3JvdXANCiMjIEBlbmQgZXhhbXBsZQ0KIyMgQGVuZCBkZWZ0eXBlZm4NCiMjIEBzZWVh bHNve2NyZWF0ZV9zZXQsIGludGVyc2VjdGlvbiwgYW5kIGNvbXBsZW1lbnR9DQoNCiMjIEF1dGhv cjogandlDQoNCmZ1bmN0aW9uIHkgPSB1bmlvbihhLGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0K ICAgIHVzYWdlICgidW5pb24oYSxiKSIpOw0KICBlbmRpZg0KDQogIGlmKGlzZW1wdHkoYSkpDQog ICAgeSA9IGNyZWF0ZV9zZXQoYik7DQogIGVsc2VpZihpc2VtcHR5KGIpKQ0KICAgIHkgPSBjcmVh dGVfc2V0KGEpOw0KICBlbHNlDQogICAgW25yYSwgbmNhXSA9IHNpemUoYSk7DQogICAgYSA9IHJl c2hhcGUoYSwxLG5yYSpuY2EpOw0KICAgIFtucmIsIG5jYl0gPSBzaXplKGIpOw0KICAgIGIgPSBy ZXNoYXBlKGIsMSxucmIqbmNiKTsNCiAgICB5ID0gY3JlYXRlX3NldChbYSwgYl0pOw0KICBlbmRp Zg0KDQplbmRmdW5jdGlvbg0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNldC9jb21w bGVtZW50Lm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADMxMDY1NyAAMDAxNzUy IAAwMDAwMDAwMzI0MCAwNzIwNDUyMDIyNyAwMTUxNjAgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByaXBwZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHNjaWVuY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMgQ29weXJp Z2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24NCiMjDQojIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBPY3RhdmUuDQojIw0KIyMgT2N0YXZlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCiMjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p DQojIyBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMjDQojIyBPY3RhdmUgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQojIyBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K IyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyMNCiMjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlDQojIyBhbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlDQojIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUENCiMjIDAyMTExLTEzMDcsIFVTQS4NCg0KIyMgLSot IHRleGluZm8gLSotDQojIyBAZGVmdHlwZWZuIHtGdW5jdGlvbiBGaWxlfSB7fSBjb21wbGVtZW50 IChAdmFye3h9LCBAdmFye3l9KQ0KIyMgUmV0dXJuIHRoZSBlbGVtZW50cyBvZiBzZXQgQHZhcnt5 fSB0aGF0IGFyZSBub3QgaW4gc2V0IEB2YXJ7eH0uICBGb3INCiMjIGV4YW1wbGUsDQojIw0KIyMg QGV4YW1wbGUNCiMjIEBncm91cA0KIyMgY29tcGxlbWVudCAoWyAxLCAyLCAzIF0sIFsgMiwgMywg NSBdKQ0KIyMgICAgICBAcmVzdWx0e30gNQ0KIyMgQGVuZCBncm91cA0KIyMgQGVuZCBleGFtcGxl DQojIyBAZW5kIGRlZnR5cGVmbg0KIyMgQHNlZWFsc297Y3JlYXRlX3NldCwgdW5pb24sIGFuZCBp bnRlcnNlY3Rpb259DQoNCiMjIEF1dGhvcjogandlDQojIyBNb2RpZmllZDogUm9zcyBMaXBwZXJ0 IFdlZCBOb3YgMTUgMDk6MzI6MzEgRVNUIDIwMDANCg0KZnVuY3Rpb24geSA9IGNvbXBsZW1lbnQg KGEsIGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0KICAgIHVzYWdlICgiY29tcGxlbWVudChhLGIp Iik7DQogIGVuZGlmDQoNCiAgaWYgKGlzZW1wdHkgKGEpKQ0KICAgIHkgPSBjcmVhdGVfc2V0ICAo Yik7DQogIGVsc2VpZiAoaXNlbXB0eSAoYikpDQogICAgeSA9IFtdOw0KICBlbHNlDQojIyB3aHkg Y2FuJ3Qgd2UganVzdCBhc3N1bWUgYSBhbmQgYiBhcmUgYWxyZWFkeSBzZXRzPyAgV2h5IGNhbid0 DQojIyB0aGF0IGJlIGEgcmVxdWlyZW1lbnQgb2YgaW50ZXJzZWN0aW9uPyAgIC1Sb3NzDQogICAg YSA9IGNyZWF0ZV9zZXQgKGEpOw0KICAgIGIgPSBjcmVhdGVfc2V0IChiKTsNCiMgSXMgZG91Ymxp bmcgdXAgb24gYSBoZXJlIHRoZSByaWdodCBpZGVhIG9yIGp1c3QgYSBzaGFtZWZ1bCBoYWNrPyAt Ug0KICAgIFt5LGNdID0gY3JlYXRlX3NldCAoW2EgYSBiXSk7DQogICAgeSA9IHkoZmluZChjPT0x KSk7DQogIGVuZGlmDQoNCmVuZGZ1bmN0aW9uDQoNCg0KDQoNCg0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNldC9jcmVh dGVfc2V0Lm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADMxMDY1NyAAMDAxNzUy IAAwMDAwMDAwMzYzMSAwNzIwNDUyMDA0MSAwMTUxMzEgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDByaXBwZXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHNjaWVuY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMgQ29weXJp Z2h0IChDKSAxOTk2LCAxOTk3IEpvaG4gVy4gRWF0b24NCiMjDQojIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiBPY3RhdmUuDQojIw0KIyMgT2N0YXZlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCiMjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24p DQojIyBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMjDQojIyBPY3RhdmUgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0DQojIyBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K IyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyMNCiMjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlDQojIyBhbG9uZyB3aXRoIE9jdGF2ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlDQojIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUENCiMjIDAyMTExLTEzMDcsIFVTQS4NCg0KIyMgLSot IHRleGluZm8gLSotDQojIyBAZGVmdHlwZWZuIHtGdW5jdGlvbiBGaWxlfSB7fSBjcmVhdGVfc2V0 IChAdmFye3h9KQ0KIyMgUmV0dXJuIGEgcm93IHZlY3RvciBjb250YWluaW5nIHRoZSB1bmlxdWUg dmFsdWVzIGluIEB2YXJ7eH0sIHNvcnRlZCBpbg0KIyMgYXNjZW5kaW5nIG9yZGVyLiAgUmV0dXJu cyBhIHJvdyB2ZWN0b3IgY29udGFpbmluZyB0aGUgZnJlcXVlbmNpZXMgb2YNCiMjIHRob3NlIHZh bHVlcyBpbiBAdmFye3h9IGluIGEgc2Vjb25kIGFyZ3VtZW50LiAgRm9yIGV4YW1wbGUsDQojIw0K IyMgQGV4YW1wbGUNCiMjIEBncm91cA0KIyMgY3JlYXRlX3NldCAoWyAxLCAyOyAzLCA0OyA0LCAy IF0pDQojIyAgICAgIEByZXN1bHR7fSBbIDEsIDIsIDMsIDQgXQ0KIyMgQGVuZCBncm91cA0KIyMg QGVuZCBleGFtcGxlDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyBbcyxjXSA9IGNyZWF0ZV9z ZXQgKFsgMSwgMjsgMywgNDsgNCwgMiBdKQ0KIyMgICAgICBAcmVzdWx0e30gcyA9IFsgMSwgMiwg MywgNCBdDQojIyAgICAgIEByZXN1bHR7fSBjID0gWyAxLCAyLCAxLCAyIF0NCiMjIEBlbmQgZ3Jv dXANCiMjIEBlbmQgZXhhbXBsZQ0KIyMgQGVuZCBkZWZ0eXBlZm4NCiMjIEBzZWVhbHNve3VuaW9u LCBpbnRlcnNlY3Rpb24sIGFuZCBjb21wbGVtZW50fQ0KDQojIyBBdXRob3I6IGp3ZQ0KIyMgTW9k aWZpZWQ6IFJvc3MgTGlwcGVydCBXZWQgTm92IDE1IDA5OjMyOjMxIEVTVCAyMDAwDQoNCmZ1bmN0 aW9uIFt5LGNdID0gY3JlYXRlX3NldCh4KQ0KDQogIGlmIChuYXJnaW4gIT0gMSkNCiAgICB1c2Fn ZSAoImNyZWF0ZV9zZXQoeCkiKTsNCiAgZW5kaWYNCg0KICBpZiAoaXNlbXB0eSh4KSkNCiAgICB5 ID0gW107DQogICAgaWYgKG5hcmdvdXQ+MSkgDQogICAgICBjID0gW107DQogICAgZW5kaWYNCiAg ZWxzZQ0KICAgIFtucngsIG5jeF0gPSBzaXplICh4KTsNCiAgICBuZWx4ID0gbnJ4ICogbmN4Ow0K ICAgIHkgPSBzb3J0IChyZXNoYXBlICh4LCAxLCBuZWx4KSk7DQogICAgaWYgKG5lbHg9PTEpDQog ICAgICBjID0gMTsNCiAgICBlbHNlDQogICAgICBjID0gW2ZpbmQgKHkoMTpuZWx4LTEpICE9IHko MjpuZWx4KSkgbmVseF07DQogICAgZW5kaWYNCiAgICB5ID0geShjKTsNCiAgICBpZiAobmFyZ291 dD4xKQ0KICAgICAgYyA9IGRpZmYoWzAgY10pOw0KICAgIGVuZGlmDQogIGVuZGlmDQoNCmVuZGZ1 bmN0aW9uDQoNCg0KDQoNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABzZXQvaW50ZXJzZWN0aW9uLm0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAz MTA2NTcgADAwMTc1MiAAMDAwMDAwMDMwNzQgMDcyMDQ1MjAyMTAgMDE1NTIwIAAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwcmlwcGVyAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABzY2llbmNlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAA MDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAACMjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBKb2huIFcuIEVhdG9uDQojIw0KIyMgVGhp cyBmaWxlIGlzIHBhcnQgb2YgT2N0YXZlLg0KIyMNCiMjIE9jdGF2ZSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQojIyB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0K IyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0 IHlvdXIgb3B0aW9uKQ0KIyMgYW55IGxhdGVyIHZlcnNpb24uDQojIw0KIyMgT2N0YXZlIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KIyMgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K IyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUNCiMjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N CiMjDQojIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQ0KIyMgYWxvbmcgd2l0aCBPY3RhdmU7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQ0KIyMgU29mdHdhcmUgRm91bmRhdGlvbiwg NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BDQojIyAwMjExMS0xMzA3LCBV U0EuDQoNCiMjIC0qLSB0ZXhpbmZvIC0qLQ0KIyMgQGRlZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0g e30gaW50ZXJzZWN0aW9uIChAdmFye3h9LCBAdmFye3l9KQ0KIyMgUmV0dXJuIHRoZSBzZXQgb2Yg ZWxlbWVudHMgdGhhdCBhcmUgaW4gYm90aCBzZXRzIEB2YXJ7eH0gYW5kIEB2YXJ7eX0uDQojIyBG b3IgZXhhbXBsZSwNCiMjDQojIyBAZXhhbXBsZQ0KIyMgQGdyb3VwDQojIyBpbnRlcnNlY3Rpb24g KFsgMSwgMiwgMyBdLCBbIDIsIDMsIDUgXSkNCiMjICAgICAgQHJlc3VsdHt9IFsgMiwgMyBdDQoj IyBAZW5kIGdyb3VwDQojIyBAZW5kIGV4YW1wbGUNCiMjIEBlbmQgZGVmdHlwZWZuDQojIyBAc2Vl YWxzb3tjcmVhdGVfc2V0LCB1bmlvbiwgYW5kIGNvbXBsZW1lbnR9DQoNCiMjIEF1dGhvcjogandl DQojIyBNb2RpZmllZDogUm9zcyBMaXBwZXJ0IFdlZCBOb3YgMTUgMDk6MzI6MzEgRVNUIDIwMDAN Cg0KZnVuY3Rpb24geSA9IGludGVyc2VjdGlvbihhLGIpDQoNCiAgaWYgKG5hcmdpbiAhPSAyKQ0K ICAgIHVzYWdlICgiaW50ZXJzZWN0aW9uKGEsYikiKTsNCiAgZW5kaWYNCg0KICBpZihpc2VtcHR5 KGEpIHx8IGlzZW1wdHkoYikpDQogICAgeSA9IFtdOw0KICAgIHJldHVybjsNCiAgZW5kaWYNCg0K IyMgd2h5IGNhbid0IHdlIGp1c3QgYXNzdW1lIGEgYW5kIGIgYXJlIGFscmVhZHkgc2V0cz8gIFdo eSBjYW4ndA0KIyMgdGhhdCBiZSBhIHJlcXVpcmVtZW50IG9mIGludGVyc2VjdGlvbj8gICAtUm9z cw0KICBhID0gY3JlYXRlX3NldChhKTsNCiAgYiA9IGNyZWF0ZV9zZXQoYik7DQoNCiAgW3ksY10g PSBjcmVhdGVfc2V0KFthIGJdKTsNCiAgeSA9IHkoZmluZChjPT0yKSk7DQoNCmVuZGZ1bmN0aW9u DQoNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ------_=_NextPart_000_01C04F13.CAD58E20--