Received: from localhost (maia-3.hub.org [200.46.204.184]) by postgresql.org (Postfix) with ESMTP id 111029FB295 for ; Sun, 1 Apr 2007 04:27:56 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.184]) (amavisd-maia, port 10024) with ESMTP id 29391-05 for ; Sun, 1 Apr 2007 04:27:45 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from westnet.com (westnet.com [216.187.52.2]) by postgresql.org (Postfix) with ESMTP id 815329FB294 for ; Sun, 1 Apr 2007 04:27:47 -0300 (ADT) Received: from westnet.com (localhost [127.0.0.1]) by westnet.com (8.14.0/8.14.0) with ESMTP id l317Rlft028091 for ; Sun, 1 Apr 2007 03:27:47 -0400 (EDT) Received: from localhost (gsmith@localhost) by westnet.com (8.14.0/8.13.2/Submit) with ESMTP id l317RkoN028088 for ; Sun, 1 Apr 2007 03:27:47 -0400 (EDT) X-Authentication-Warning: westnet.com: gsmith owned process doing -bs Date: Sun, 1 Apr 2007 03:27:46 -0400 (EDT) From: Greg Smith X-X-Sender: gsmith@westnet.com To: pgsql-patches@postgresql.org Subject: Logging checkpoints and other slowdown causes Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-1804928587-1175405528=:15714" Content-ID: X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.843 tagged_above=0 required=5 tests=AWL=-0.822, BAYES_50=0.001, SARE_SPEC_ROLEX_NOV5A=1.666, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 X-Spam-Level: X-Archive-Number: 200704/3 X-Sequence-Number: 1570 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---559023410-1804928587-1175405528=:15714 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed Content-ID: This patch puts entries in the log file around some backend events that regularly cause client pauses, most of which are visible only when running with log_min_messages = debug2. The main focus is regularly occuring checkpoints, from either running out of segments or hitting a timeout. This is an example of what gets written to the logs at checkpoint time: DEBUG2: checkpoint required (timeout passed) DEBUG2: checkpoint starting DEBUG2: checkpoint flushing buffer pool DEBUG2: checkpoint database fsync starting DEBUG2: checkpoint database fsync complete DEBUG1: checkpoint buffers dirty=16.7 MB (13.0%) write=174.8 ms sync=3716.5 ms DEBUG2: checkpoint complete; 0 transaction log file(s) added, 0 removed, 0 recycled The idea here is that if you want to really watch what your system is doing, either to track down a problem or for benchmarking, you log at DEBUG2 and timestamp the logs with something like log_line_prefix = '[%m]:'. Then line up your timestamped transactions with the logs to figure out what happened during bad periods. This is very easy to do with the timestamped pgbench latency logs for example, so you can put them in time sequence order and see something like "oh, those long transactions all came in between the fsync start and end". The summary line with the write/sync timing information has a broader use and suggests when you need to go deeper, which is why I put that one at DEBUG1. I also adjust some other log messages to make it easier to run the system at DEBUG2 without going completely crazy, like moving individual WAL segment recycles to DEBUG3 and standardizing the format of the fork/exit messages so they're easier to filter out. My main concern about this code is how it adds several gettimeofday calls and complicated string building inside FlushBufferPool, all of which is wasted if this data isn't actually going to get logged. I'd like to have something that tells me whether I should even bother, but I didn't want to poke into the elog variables for fear of adding a dependency on its current structure to here. Ideally, it would be nice to call something like WillLog(DEBUG2) and get a boolean back saying whether something at that log level will be output anywhere; I don't know enough about the logging code to add such a thing to it myself. -- * Greg Smith gsmith@gregsmith.com http://www.gregsmith.com Baltimore, MD ---559023410-1804928587-1175405528=:15714 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=checkpointlog.txt Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=checkpointlog.txt SW5kZXg6IHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNy b290L3Bnc3FsL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyx2 DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjY1DQpkaWZmIC1jIC1yMS4yNjUg eGxvZy5jDQoqKiogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CTMgTWFyIDIwMDcgMjA6MDI6MjYgLTAwMDAJMS4yNjUNCi0tLSBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMJMSBBcHIgMjAwNyAwNDo1NTox OSAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMTU5MSwxNjAwICoqKioN CiAgCQkJCQlpZiAobmV3X2hpZ2hiaXRzICE9IG9sZF9oaWdoYml0cyB8fA0K ICAJCQkJCQluZXdfc2Vnbm8gPj0gb2xkX3NlZ25vICsgKHVpbnQzMikgKENo ZWNrUG9pbnRTZWdtZW50cy0xKSkNCiAgCQkJCQl7DQohICNpZmRlZiBXQUxf REVCVUcNCiEgCQkJCQkJaWYgKFhMT0dfREVCVUcpDQohIAkJCQkJCQllbG9n KExPRywgInRpbWUgZm9yIGEgY2hlY2twb2ludCwgc2lnbmFsaW5nIGJnd3Jp dGVyIik7DQohICNlbmRpZg0KICAJCQkJCQlSZXF1ZXN0Q2hlY2twb2ludChm YWxzZSwgdHJ1ZSk7DQogIAkJCQkJfQ0KICAJCQkJfQ0KLS0tIDE1OTEsMTU5 OCAtLS0tDQogIAkJCQkJaWYgKG5ld19oaWdoYml0cyAhPSBvbGRfaGlnaGJp dHMgfHwNCiAgCQkJCQkJbmV3X3NlZ25vID49IG9sZF9zZWdubyArICh1aW50 MzIpIChDaGVja1BvaW50U2VnbWVudHMtMSkpDQogIAkJCQkJew0KISAJCQkJ CQllcmVwb3J0KERFQlVHMiwoZXJybXNnKA0KISAJCQkJCQkJImNoZWNrcG9p bnQgcmVxdWlyZWQgKHdyb3RlIGNoZWNrcG9pbnRfc2VnbWVudHMpIikpKTsN CiAgCQkJCQkJUmVxdWVzdENoZWNrcG9pbnQoZmFsc2UsIHRydWUpOw0KICAJ CQkJCX0NCiAgCQkJCX0NCioqKioqKioqKioqKioqKg0KKioqIDE4NTgsMTg2 MyAqKioqDQotLS0gMTg1NiwxODYzIC0tLS0NCiAgCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLA0KICAJCQkJIGVycm1zZygiY291bGQgbm90IGNy ZWF0ZSBmaWxlIFwiJXNcIjogJW0iLCB0bXBwYXRoKSkpOw0KICANCisgCWVy ZXBvcnQoREVCVUcyLCAoZXJybXNnKCJXQUwgY3JlYXRpbmcgYW5kIGZpbGxp bmcgbmV3IGZpbGUgb24gZGlzayIpKSk7DQorIA0KICAJLyoNCiAgCSAqIFpl cm8tZmlsbCB0aGUgZmlsZS4JV2UgaGF2ZSB0byBkbyB0aGlzIHRoZSBoYXJk IHdheSB0byBlbnN1cmUgdGhhdCBhbGwNCiAgCSAqIHRoZSBmaWxlIHNwYWNl IGhhcyByZWFsbHkgYmVlbiBhbGxvY2F0ZWQgLS0tIG9uIHBsYXRmb3JtcyB0 aGF0IGFsbG93DQoqKioqKioqKioqKioqKioNCioqKiAyNTY1LDI1NzEgKioq Kg0KICAJCQkJCQkJCQkJICAgdHJ1ZSwgJm1heF9hZHZhbmNlLA0KICAJCQkJ CQkJCQkJICAgdHJ1ZSkpDQogIAkJCQl7DQohIAkJCQkJZXJlcG9ydChERUJV RzIsDQogIAkJCQkJCQkoZXJybXNnKCJyZWN5Y2xlZCB0cmFuc2FjdGlvbiBs b2cgZmlsZSBcIiVzXCIiLA0KICAJCQkJCQkJCQl4bGRlLT5kX25hbWUpKSk7 DQogIAkJCQkJKCpuc2Vnc3JlY3ljbGVkKSsrOw0KLS0tIDI1NjUsMjU3MSAt LS0tDQogIAkJCQkJCQkJCQkgICB0cnVlLCAmbWF4X2FkdmFuY2UsDQogIAkJ CQkJCQkJCQkgICB0cnVlKSkNCiAgCQkJCXsNCiEgCQkJCQllcmVwb3J0KERF QlVHMywNCiAgCQkJCQkJCShlcnJtc2coInJlY3ljbGVkIHRyYW5zYWN0aW9u IGxvZyBmaWxlIFwiJXNcIiIsDQogIAkJCQkJCQkJCXhsZGUtPmRfbmFtZSkp KTsNCiAgCQkJCQkoKm5zZWdzcmVjeWNsZWQpKys7DQoqKioqKioqKioqKioq KioNCioqKiA1NDI0LDU0MjkgKioqKg0KLS0tIDU0MjQsNTQzMCAtLS0tDQog IAkJCUxXTG9ja1JlbGVhc2UoQ2hlY2twb2ludFN0YXJ0TG9jayk7DQogIAkJ CUxXTG9ja1JlbGVhc2UoQ2hlY2twb2ludExvY2spOw0KICAJCQlFTkRfQ1JJ VF9TRUNUSU9OKCk7DQorIAkJCWVyZXBvcnQoREVCVUcyLChlcnJtc2coImNo ZWNrcG9pbnQgcmVxdWVzdCBpZ25vcmVkIChubyBjaGFuZ2VzKSIpKSk7DQog IAkJCXJldHVybjsNCiAgCQl9DQogIAl9DQoqKioqKioqKioqKioqKioNCioq KiA2MDg3LDYwOTIgKioqKg0KLS0tIDYwODgsNjA5NCAtLS0tDQogIAkJICog aGF2ZSBkaWZmZXJlbnQgY2hlY2twb2ludCBwb3NpdGlvbnMgYW5kIGhlbmNl IGRpZmZlcmVudCBoaXN0b3J5DQogIAkJICogZmlsZSBuYW1lcywgZXZlbiBp ZiBub3RoaW5nIGhhcHBlbmVkIGluIGJldHdlZW4uDQogIAkJICovDQorIAkJ ZXJlcG9ydChERUJVRzIsIChlcnJtc2coImNoZWNrcG9pbnQgcmVxdWlyZWQg KHN0YXJ0aW5nIGJhY2t1cCkiKSkpOw0KICAJCVJlcXVlc3RDaGVja3BvaW50 KHRydWUsIGZhbHNlKTsNCiAgDQogIAkJLyoNCkluZGV4OiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jLHYNCnJldHJpZXZpbmcg cmV2aXNpb24gMS40MA0KZGlmZiAtYyAtcjEuNDAgYXV0b3ZhY3V1bS5jDQoq Kiogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMJMjggTWFy IDIwMDcgMjI6MTc6MTIgLTAwMDAJMS40MA0KLS0tIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCTEgQXByIDIwMDcgMDQ6NTU6MjAgLTAw MDANCioqKioqKioqKioqKioqKg0KKioqIDgxMSw4MTYgKioqKg0KLS0tIDgx MSw4MTggLS0tLQ0KICAJCS8qIEFuZCBkbyBhbiBhcHByb3ByaWF0ZSBhbW91 bnQgb2Ygd29yayAqLw0KICAJCXJlY2VudFhpZCA9IFJlYWROZXdUcmFuc2Fj dGlvbklkKCk7DQogIAkJZG9fYXV0b3ZhY3V1bSgpOw0KKyAJCWVyZXBvcnQo REVCVUcyLA0KKyAJCQkJKGVycm1zZygiYXV0b3ZhY3V1bTogcHJvY2Vzc2lu ZyBkYXRhYmFzZSBcIiVzXCIgY29tcGxldGUiLCBkYm5hbWUpKSk7DQogIAl9 DQogIA0KICAJLyoNCkluZGV4OiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d3JpdGVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv cHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd3JpdGVyLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjM3DQpkaWZm IC1jIC1yMS4zNyBiZ3dyaXRlci5jDQoqKiogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dyaXRlci5jCTMwIE1hciAyMDA3IDE4OjM0OjU1IC0wMDAwCTEu MzcNCi0tLSBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMJMSBB cHIgMjAwNyAwNDo1NToyMSAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiog MzkyLDM5NyAqKioqDQotLS0gMzkyLDM5OCAtLS0tDQogIAkJaWYgKGVsYXBz ZWRfc2VjcyA+PSBDaGVja1BvaW50VGltZW91dCkNCiAgCQl7DQogIAkJCWRv X2NoZWNrcG9pbnQgPSB0cnVlOw0KKyAJCQllcmVwb3J0KERFQlVHMiwgKGVy cm1zZygiY2hlY2twb2ludCByZXF1aXJlZCAodGltZW91dCBwYXNzZWQpIikp KTsNCiAgCQkJaWYgKCFmb3JjZV9jaGVja3BvaW50KQ0KICAJCQkJQmdXcml0 ZXJTdGF0cy5tX3RpbWVkX2NoZWNrcG9pbnRzKys7DQogIAkJfQ0KSW5kZXg6 IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3Qv cGdzcWwvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMsdg0K cmV0cmlldmluZyByZXZpc2lvbiAxLjUyNw0KZGlmZiAtYyAtcjEuNTI3IHBv c3RtYXN0ZXIuYw0KKioqIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1h c3Rlci5jCTIyIE1hciAyMDA3IDE5OjUzOjMwIC0wMDAwCTEuNTI3DQotLS0g c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMJMSBBcHIgMjAw NyAwNDo1NToyMyAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMjYzMCwy NjM2ICoqKioNCiAgDQogIAkvKiBpbiBwYXJlbnQsIHN1Y2Nlc3NmdWwgZm9y ayAqLw0KICAJZXJlcG9ydChERUJVRzIsDQohIAkJCShlcnJtc2dfaW50ZXJu YWwoImZvcmtlZCBuZXcgYmFja2VuZCwgcGlkPSVkIHNvY2tldD0lZCIsDQog IAkJCQkJCQkgKGludCkgcGlkLCBwb3J0LT5zb2NrKSkpOw0KICANCiAgCS8q DQotLS0gMjYzMCwyNjM2IC0tLS0NCiAgDQogIAkvKiBpbiBwYXJlbnQsIHN1 Y2Nlc3NmdWwgZm9yayAqLw0KICAJZXJlcG9ydChERUJVRzIsDQohIAkJCShl cnJtc2dfaW50ZXJuYWwoImZvcmtlZCBuZXcgYmFja2VuZCAoUElEICVkKSBz b2NrZXQ9JWQiLA0KICAJCQkJCQkJIChpbnQpIHBpZCwgcG9ydC0+c29jaykp KTsNCiAgDQogIAkvKg0KSW5kZXg6IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zm1nci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIx Ng0KZGlmZiAtYyAtcjEuMjE2IGJ1Zm1nci5jDQoqKiogc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMJMzAgTWFyIDIwMDcgMTg6MzQ6NTUg LTAwMDAJMS4yMTYNCi0tLSBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYwkxIEFwciAyMDA3IDA0OjU1OjI1IC0wMDAwDQoqKioqKioqKioq KioqKioNCioqKiA5NDYsOTU3ICoqKioNCiAgICoNCiAgICogVGhpcyBpcyBj YWxsZWQgYXQgY2hlY2twb2ludCB0aW1lIHRvIHdyaXRlIG91dCBhbGwgZGly dHkgc2hhcmVkIGJ1ZmZlcnMuDQogICAqLw0KISB2b2lkDQogIEJ1ZmZlclN5 bmModm9pZCkNCiAgew0KICAJaW50CQkJYnVmX2lkOw0KICAJaW50CQkJbnVt X3RvX3NjYW47DQogIAlpbnQJCQlhYnNvcmJfY291bnRlcjsNCiAgDQogIAkv Kg0KICAJICogRmluZCBvdXQgd2hlcmUgdG8gc3RhcnQgdGhlIGNpcmN1bGFy IHNjYW4uDQotLS0gOTQ2LDk1OCAtLS0tDQogICAqDQogICAqIFRoaXMgaXMg Y2FsbGVkIGF0IGNoZWNrcG9pbnQgdGltZSB0byB3cml0ZSBvdXQgYWxsIGRp cnR5IHNoYXJlZCBidWZmZXJzLg0KICAgKi8NCiEgaW50DQogIEJ1ZmZlclN5 bmModm9pZCkNCiAgew0KICAJaW50CQkJYnVmX2lkOw0KICAJaW50CQkJbnVt X3RvX3NjYW47DQogIAlpbnQJCQlhYnNvcmJfY291bnRlcjsNCisgCWludAkJ CWRpcnR5X2J1ZmZlcnM7DQogIA0KICAJLyoNCiAgCSAqIEZpbmQgb3V0IHdo ZXJlIHRvIHN0YXJ0IHRoZSBjaXJjdWxhciBzY2FuLg0KKioqKioqKioqKioq KioqDQoqKiogOTY2LDk3NiAqKioqDQogIAkgKi8NCiAgCW51bV90b19zY2Fu ID0gTkJ1ZmZlcnM7DQogIAlhYnNvcmJfY291bnRlciA9IFdSSVRFU19QRVJf QUJTT1JCOw0KICAJd2hpbGUgKG51bV90b19zY2FuLS0gPiAwKQ0KICAJew0K ICAJCWlmIChTeW5jT25lQnVmZmVyKGJ1Zl9pZCwgZmFsc2UpKQ0KICAJCXsN CiEgCQkJQmdXcml0ZXJTdGF0cy5tX2J1Zl93cml0dGVuX2NoZWNrcG9pbnRz Kys7DQogIA0KICAJCQkvKg0KICAJCQkgKiBJZiBpbiBiZ3dyaXRlciwgYWJz b3JiIHBlbmRpbmcgZnN5bmMgcmVxdWVzdHMgYWZ0ZXIgZWFjaA0KLS0tIDk2 Nyw5NzggLS0tLQ0KICAJICovDQogIAludW1fdG9fc2NhbiA9IE5CdWZmZXJz Ow0KICAJYWJzb3JiX2NvdW50ZXIgPSBXUklURVNfUEVSX0FCU09SQjsNCisg CWRpcnR5X2J1ZmZlcnMgPSAwOw0KICAJd2hpbGUgKG51bV90b19zY2FuLS0g PiAwKQ0KICAJew0KICAJCWlmIChTeW5jT25lQnVmZmVyKGJ1Zl9pZCwgZmFs c2UpKQ0KICAJCXsNCiEgCQkJZGlydHlfYnVmZmVycysrOw0KICANCiAgCQkJ LyoNCiAgCQkJICogSWYgaW4gYmd3cml0ZXIsIGFic29yYiBwZW5kaW5nIGZz eW5jIHJlcXVlc3RzIGFmdGVyIGVhY2gNCioqKioqKioqKioqKioqKg0KKioq IDk4Nyw5OTIgKioqKg0KLS0tIDk4OSw5OTcgLS0tLQ0KICAJCWlmICgrK2J1 Zl9pZCA+PSBOQnVmZmVycykNCiAgCQkJYnVmX2lkID0gMDsNCiAgCX0NCisg DQorIAlCZ1dyaXRlclN0YXRzLm1fYnVmX3dyaXR0ZW5fY2hlY2twb2ludHMr PWRpcnR5X2J1ZmZlcnM7DQorIAlyZXR1cm4gZGlydHlfYnVmZmVyczsNCiAg fQ0KICANCiAgLyoNCioqKioqKioqKioqKioqKg0KKioqIDEyODgsMTI5NSAq KioqDQogIHZvaWQNCiAgRmx1c2hCdWZmZXJQb29sKHZvaWQpDQogIHsNCiEg CUJ1ZmZlclN5bmMoKTsNCiAgCXNtZ3JzeW5jKCk7DQogIH0NCiAgDQogIA0K LS0tIDEyOTMsMTMyMCAtLS0tDQogIHZvaWQNCiAgRmx1c2hCdWZmZXJQb29s KHZvaWQpDQogIHsNCiEgCWludCBkaXJ0eTsNCiEgCXN0cnVjdCB0aW1ldmFs IHN0YXJ0X3QsIHN5bmNfdCwgZW5kX3Q7DQohIAlsb25nIHVfc2VjX2Zvcl9i dWZmZXJzLCB1X3NlY19mb3Jfc3luYzsNCiEgDQohIAlnZXR0aW1lb2ZkYXko JnN0YXJ0X3QsIE5VTEwpOw0KISAJZXJlcG9ydChERUJVRzIsIChlcnJtc2co ImNoZWNrcG9pbnQgZmx1c2hpbmcgYnVmZmVyIHBvb2wiKSkpOw0KISAJZGly dHk9QnVmZmVyU3luYygpOw0KISAJZ2V0dGltZW9mZGF5KCZzeW5jX3QsIE5V TEwpOw0KISAJZXJlcG9ydChERUJVRzIsIChlcnJtc2coImNoZWNrcG9pbnQg ZGF0YWJhc2UgZnN5bmMgc3RhcnRpbmciKSkpOw0KICAJc21ncnN5bmMoKTsN CisgCWdldHRpbWVvZmRheSgmZW5kX3QsIE5VTEwpOw0KKyAJZXJlcG9ydChE RUJVRzIsIChlcnJtc2coImNoZWNrcG9pbnQgZGF0YWJhc2UgZnN5bmMgY29t cGxldGUiKSkpOw0KKyANCisgCXVfc2VjX2Zvcl9idWZmZXJzID0gMTAwMDAw MCAqIChsb25nKSAoc3luY190LnR2X3NlYyAtIHN0YXJ0X3QudHZfc2VjKSAr DQorIAkJKGxvbmcpIChzeW5jX3QudHZfdXNlYyAtIHN0YXJ0X3QudHZfdXNl Yyk7DQorIAl1X3NlY19mb3Jfc3luYyA9IDEwMDAwMDAgKiAobG9uZykgKGVu ZF90LnR2X3NlYyAtIHN5bmNfdC50dl9zZWMpICsNCisgCQkobG9uZykgKGVu ZF90LnR2X3VzZWMgLSBzeW5jX3QudHZfdXNlYyk7DQorIA0KKyAJZXJlcG9y dChERUJVRzEsKGVycm1zZygNCisgCQkiY2hlY2twb2ludCBidWZmZXJzIGRp cnR5PSUuMWYgTUIgKCUuMWYlJSkgd3JpdGU9JS4xZiBtcyBzeW5jPSUuMWYg bXMiLA0KKyAJCShmbG9hdCkgKEJMQ0tTWiAqIGRpcnR5KSAvICgxMDI0KjEw MjQpLCAoZmxvYXQpIDEwMCAqIGRpcnR5IC8gTkJ1ZmZlcnMsDQorIAkJKGZs b2F0KSB1X3NlY19mb3JfYnVmZmVycyAvIDEwMDAsIChmbG9hdCkgdV9zZWNf Zm9yX3N5bmMgLyAxMDAwKSkpOw0KICB9DQogIA0KICANCkluZGV4OiBzcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTAyDQpkaWZmIC1jIC1yMS4xMDIgYnVmbWdyLmgNCioqKiBzcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCTUgSmFuIDIwMDcgMjI6MTk6NTcgLTAw MDAJMS4xMDINCi0tLSBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCTEg QXByIDIwMDcgMDQ6NTU6MjYgLTAwMDANCioqKioqKioqKioqKioqKg0KKioq IDE1MCwxNTYgKioqKg0KICBleHRlcm4gdm9pZCBBYm9ydEJ1ZmZlcklPKHZv aWQpOw0KICANCiAgZXh0ZXJuIHZvaWQgQnVmbWdyQ29tbWl0KHZvaWQpOw0K ISBleHRlcm4gdm9pZCBCdWZmZXJTeW5jKHZvaWQpOw0KICBleHRlcm4gdm9p ZCBCZ0J1ZmZlclN5bmModm9pZCk7DQogIA0KICBleHRlcm4gdm9pZCBBdFBy b2NFeGl0X0xvY2FsQnVmZmVycyh2b2lkKTsNCi0tLSAxNTAsMTU2IC0tLS0N CiAgZXh0ZXJuIHZvaWQgQWJvcnRCdWZmZXJJTyh2b2lkKTsNCiAgDQogIGV4 dGVybiB2b2lkIEJ1Zm1nckNvbW1pdCh2b2lkKTsNCiEgZXh0ZXJuIGludCBC dWZmZXJTeW5jKHZvaWQpOw0KICBleHRlcm4gdm9pZCBCZ0J1ZmZlclN5bmMo dm9pZCk7DQogIA0KICBleHRlcm4gdm9pZCBBdFByb2NFeGl0X0xvY2FsQnVm ZmVycyh2b2lkKTsNCg== ---559023410-1804928587-1175405528=:15714--