Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D924D200CFA for ; Tue, 5 Sep 2017 16:55:45 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id D7C2F161421; Tue, 5 Sep 2017 14:55:45 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id CF1B7160BE4 for ; Tue, 5 Sep 2017 16:55:44 +0200 (CEST) Received: (qmail 65096 invoked by uid 500); 5 Sep 2017 14:55:43 -0000 Mailing-List: contact user-help@flink.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list user@flink.apache.org Received: (qmail 65086 invoked by uid 99); 5 Sep 2017 14:55:43 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Sep 2017 14:55:43 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id DD2F9CA19B for ; Tue, 5 Sep 2017 14:55:42 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -0.401 X-Spam-Level: X-Spam-Status: No, score=-0.401 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-2.8, RCVD_IN_SORBS_SPAM=0.5, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id fIPGR7ogXug4 for ; Tue, 5 Sep 2017 14:55:38 +0000 (UTC) Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id C20A35FC6C for ; Tue, 5 Sep 2017 14:55:37 +0000 (UTC) Received: by mail-pf0-f195.google.com with SMTP id q76so1791793pfq.5 for ; Tue, 05 Sep 2017 07:55:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=2SM0P3mkV2p0f+aucQvwv7c1HpVJxpxF+2uRofGe8jM=; b=EhdzsBeZR9b4lSABGyAQ8pGrHQFV0n6DONwEC5A8XKC6RL8Iz4t+KuxyOCDAspyYoL kcu3Wi7r2DMYahfkKcNrdRZ7bNvKbNDZWnJYLIPAnWAbQuRvXSuI3NBx/ep4t0DTSMtv 46mB6sZWq3VF0rgOKQeHUPyO+SBHMBXi5VMsG7G+YupwxG6hfpJEr+5Tqv/1vbaaBknJ fzaGRy4mkZa34YumUuVBcS0LEhpbj8ZpqcMY0oSuMHAZ/sPo+Xpc0/4K73hsjneHOZn0 1DMTJkWo12DnOxcX8n6EyfxtA59dteuINO+XJ7z8K51pdNTNLyozHSz5blhn5oIM1QJz Ov5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=2SM0P3mkV2p0f+aucQvwv7c1HpVJxpxF+2uRofGe8jM=; b=NG+fR8k4yMpjAIdpnZ9gBlIF9QDkYqMlWRkTod9dZe03AogbtLRsdUvRYfR9VOnKZU hfDbo0VSAoBz37mSIe++0lhSAtMpcI3G8j31YCt6hcqbm6gdWaGm6vy4iRTO/O40crFz q7AfHO8KNqCuTXXl7igE/Lqed3vXZ47WkDE1n2BttZT1HDzk0kyvLWV9E8fKQPh/Y64l sabpfjYQc/i6D+Tl1uNhcWE8NU9fssvihshu7xYOM9GHRrtM8rB+S+fBZMcEql82Db9n DuG5Qh3tQ+qn64Ch6h4TSzXxMuk6uiI++e2gZQ0t4X4SEKayp7d30UDJ7h/RNF/MwPZH fI9g== X-Gm-Message-State: AHPjjUjZ6lhTRu9J76Ndw82AofJl9bg4uO8hKXyJEbUsZ+A7IZLQaFCz snd0bGjFHr+FgCCGltw= X-Google-Smtp-Source: ADKCNb44U9fnQ6bAw+szIEs0kP2uIdnweJgnCdfch6L5o4q5EVcYWWFx5JXVDVnc2Hb8Ux4XIlab5w== X-Received: by 10.84.194.131 with SMTP id h3mr4640136pld.202.1504623336601; Tue, 05 Sep 2017 07:55:36 -0700 (PDT) Received: from [192.168.0.3] ([14.177.242.122]) by smtp.gmail.com with ESMTPSA id d83sm1611278pfl.107.2017.09.05.07.55.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2017 07:55:35 -0700 (PDT) Subject: Re: Process Function To: Navneeth Krishnan , user@flink.apache.org References: From: Kien Truong Message-ID: Date: Tue, 5 Sep 2017 21:55:31 +0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Thunderbird/56.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/alternative; boundary="------------BC527DD9950592CFF321F481" Content-Language: en-US archived-at: Tue, 05 Sep 2017 14:55:46 -0000 This is a multi-part message in MIME format. --------------BC527DD9950592CFF321F481 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, You can register a processing time timer inside the onTimer and the open function to have a timer that run periodically. Pseudo-code example: |ValueState lastRuntime; void open() { ctx.timerService().registerProcessingTimeTimer(current.timestamp + 60000); } void onTimer() { // Run the periodic task if (lastRuntime.get() + 60000 == timeStamp) { periodicTask(); } // Re-register the processing time timer timer lastRuntime.setValue(timeStamp); | ||ctx.timerService().registerProcessingTimeTimer(current.timestamp + 60000);| } void periodicTask() | For the second question, timer are already scoped by key, so you can keep a lastModified variable as a ValueState, then compare it to the timestamp provided by the timer to see if the current key should be evicted. Checkout the example on the ProcessFunction page. https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/stream/process_function.html Best regards, Kien On 9/5/2017 11:49 AM, Navneeth Krishnan wrote: > Hi All, > > I have a streaming pipeline which is keyed by userid and then to a > flatmap function. I need to clear the state after sometime and I was > looking at process function for it. > > Inside the process element function if I register a timer wouldn't it > create a timer for each incoming message? > |// schedule the next timer 60 seconds from the current event time > ctx.timerService().registerEventTimeTimer(current.timestamp + 60000);| > How can I get something like a clean up task that runs every 2 mins > and evicts all stale data? Also is there a way to get the key inside > onTimer function so that I know which key has to be evicted? > > Thanks, > Navneeth --------------BC527DD9950592CFF321F481 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 PGh0bWw+DQogIDxoZWFkPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCiAgPC9oZWFkPg0KICA8Ym9k eSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4NCiAgICA8cD5IaSw8L3A+DQog ICAgPHA+WW91IGNhbiByZWdpc3RlciBhIHByb2Nlc3NpbmcgdGltZSB0aW1lciBpbnNpZGUg dGhlIG9uVGltZXIgYW5kDQogICAgICB0aGUgb3BlbiBmdW5jdGlvbiB0byBoYXZlIGEgdGlt ZXIgdGhhdCBydW4gcGVyaW9kaWNhbGx5Ljxicj4NCiAgICA8L3A+DQogICAgPHA+UHNldWRv LWNvZGUgZXhhbXBsZTo8L3A+DQogICAgPHByZSBzdHlsZT0iYm94LXNpemluZzpib3JkZXIt Ym94O292ZXJmbG93OmF1dG87Zm9udC1mYW1pbHk6TWVubG8sJnF1b3Q7THVjaWRhIENvbnNv bGUmcXVvdDssbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OS41cHg7bWFyZ2lu LXRvcDowcHg7bWFyZ2luLWJvdHRvbToxMHB4O2xpbmUtaGVpZ2h0OjEuNDI4NTc7Y29sb3I6 cmdiKDUxLDUxLDUxKTt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29y ZDtiYWNrZ3JvdW5kOnJnYigyNDcsMjQ3LDI0Nyk7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1 czo0cHgiPjxjb2RlIGNsYXNzPSJnbWFpbC1sYW5ndWFnZS1qYXZhIiBzdHlsZT0iYm94LXNp emluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5Ok1lbmxvLCZxdW90O0x1Y2lkYSBDb25zb2xl JnF1b3Q7LG1vbm9zcGFjZTtmb250LXNpemU6aW5oZXJpdDtwYWRkaW5nOjBweDtjb2xvcjpp bmhlcml0O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowcHg7d2hpdGUt c3BhY2U6cHJlLXdyYXAiPjxzcGFuIGNsYXNzPSJnbWFpbC1uIiBzdHlsZT0iYm94LXNpemlu Zzpib3JkZXItYm94Ij5WYWx1ZVN0YXRlJmx0O0xvbmcmZ3Q7IGxhc3RSdW50aW1lOw0KDQp2 b2lkIG9wZW4oKSB7DQogIGN0eDwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbyIgc3R5bGU9 ImJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXdlaWdodDpib2xkIj4uPC9zcGFuPjxzcGFu IGNsYXNzPSJnbWFpbC1uYSIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjpy Z2IoMCwxMjgsMTI4KSI+dGltZXJTZXJ2aWNlPC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1v IiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94O2ZvbnQtd2VpZ2h0OmJvbGQiPigpLnJl Z2lzdGVyUHJvY2Vzc2luZ1RpbWVUaW1lcjwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbyIg c3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXdlaWdodDpib2xkIj4oPC9zcGFu PjxzcGFuIGNsYXNzPSJnbWFpbC1uIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94Ij5j dXJyZW50PC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1vIiBzdHlsZT0iYm94LXNpemluZzpi b3JkZXItYm94O2ZvbnQtd2VpZ2h0OmJvbGQiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWls LW5hIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnJnYigwLDEyOCwxMjgp Ij50aW1lc3RhbXA8L3NwYW4+IDxzcGFuIGNsYXNzPSJnbWFpbC1vIiBzdHlsZT0iYm94LXNp emluZzpib3JkZXItYm94O2ZvbnQtd2VpZ2h0OmJvbGQiPis8L3NwYW4+IDxzcGFuIGNsYXNz PSJnbWFpbC1taSIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjpyZ2IoMCwx NTMsMTUzKSI+NjAwMDA8L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWlsLW8iIHN0eWxlPSJib3gt c2l6aW5nOmJvcmRlci1ib3g7Zm9udC13ZWlnaHQ6Ym9sZCI+KTsNCn0NCg0Kdm9pZCBvblRp bWVyKCkgew0KICAvLyBSdW4gdGhlIHBlcmlvZGljIHRhc2sNCiAgaWYgKGxhc3RSdW50aW1l LmdldCgpICsgNjAwMDAgPT0gdGltZVN0YW1wKSB7DQogICAgcGVyaW9kaWNUYXNrKCk7DQog IH0NCiAgLy8gUmUtcmVnaXN0ZXIgdGhlIHByb2Nlc3NpbmcgdGltZSB0aW1lciB0aW1lcg0K ICBsYXN0UnVudGltZS5zZXRWYWx1ZSh0aW1lU3RhbXApOw0KPC9zcGFuPjwvY29kZT4gIDxj b2RlIGNsYXNzPSJnbWFpbC1sYW5ndWFnZS1qYXZhIiBzdHlsZT0iYm94LXNpemluZzpib3Jk ZXItYm94O2ZvbnQtZmFtaWx5Ok1lbmxvLCZxdW90O0x1Y2lkYSBDb25zb2xlJnF1b3Q7LG1v bm9zcGFjZTtmb250LXNpemU6aW5oZXJpdDtwYWRkaW5nOjBweDtjb2xvcjppbmhlcml0O2Jh Y2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowcHg7d2hpdGUtc3BhY2U6cHJl LXdyYXAiPjxzcGFuIGNsYXNzPSJnbWFpbC1vIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXIt Ym94O2ZvbnQtd2VpZ2h0OmJvbGQiPjxjb2RlIGNsYXNzPSJnbWFpbC1sYW5ndWFnZS1qYXZh IiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5Ok1lbmxvLCZxdW90 O0x1Y2lkYSBDb25zb2xlJnF1b3Q7LG1vbm9zcGFjZTtmb250LXNpemU6aW5oZXJpdDtwYWRk aW5nOjBweDtjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJh ZGl1czowcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXAiPjxzcGFuIGNsYXNzPSJnbWFpbC1uIiBz dHlsZT0iYm94LXNpemluZzpib3JkZXItYm94Ij5jdHg8L3NwYW4+PHNwYW4gY2xhc3M9Imdt YWlsLW8iIHN0eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC13ZWlnaHQ6Ym9sZCI+ Ljwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbmEiIHN0eWxlPSJib3gtc2l6aW5nOmJvcmRl ci1ib3g7Y29sb3I6cmdiKDAsMTI4LDEyOCkiPnRpbWVyU2VydmljZTwvc3Bhbj48c3BhbiBj bGFzcz0iZ21haWwtbyIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXdlaWdo dDpib2xkIj4oKS48L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWlsLW5hIiBzdHlsZT0iYm94LXNp emluZzpib3JkZXItYm94O2NvbG9yOnJnYigwLDEyOCwxMjgpIj5yZWdpc3RlclByb2Nlc3Np bmdUaW1lVGltZXI8L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWlsLW8iIHN0eWxlPSJib3gtc2l6 aW5nOmJvcmRlci1ib3g7Zm9udC13ZWlnaHQ6Ym9sZCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0i Z21haWwtbiIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveCI+Y3VycmVudDwvc3Bhbj48 c3BhbiBjbGFzcz0iZ21haWwtbyIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250 LXdlaWdodDpib2xkIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1uYSIgc3R5bGU9ImJv eC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjpyZ2IoMCwxMjgsMTI4KSI+dGltZXN0YW1wPC9z cGFuPiA8c3BhbiBjbGFzcz0iZ21haWwtbyIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJv eDtmb250LXdlaWdodDpib2xkIj4rPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ21haWwtbWkiIHN0 eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6cmdiKDAsMTUzLDE1MykiPjYwMDAw PC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1vIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXIt Ym94O2ZvbnQtd2VpZ2h0OmJvbGQiPik7PC9zcGFuPjwvY29kZT4NCn0NCg0Kdm9pZCBwZXJp b2RpY1Rhc2soKQ0KPC9zcGFuPjwvY29kZT48L3ByZT4NCiAgICA8ZGl2IGNsYXNzPSJtb3ot Y2l0ZS1wcmVmaXgiPjxicj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJtb3otY2l0 ZS1wcmVmaXgiPkZvciB0aGUgc2Vjb25kIHF1ZXN0aW9uLCB0aW1lciBhcmUNCiAgICAgIGFs cmVhZHkgc2NvcGVkIGJ5IGtleSwgc28geW91IGNhbiBrZWVwIGEgbGFzdE1vZGlmaWVkIHZh cmlhYmxlIGFzDQogICAgICBhIFZhbHVlU3RhdGUsIDxicj4NCiAgICA8L2Rpdj4NCiAgICA8 ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPnRoZW4gY29tcGFyZSBpdCB0byB0aGUgdGlt ZXN0YW1wDQogICAgICBwcm92aWRlZCBieSB0aGUgdGltZXIgdG8gc2VlIGlmIHRoZSBjdXJy ZW50IGtleSBzaG91bGQgYmUgZXZpY3RlZC4NCiAgICAgIDxicj4NCiAgICA8L2Rpdj4NCiAg ICA8ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPkNoZWNrb3V0IHRoZSBleGFtcGxlIG9u IHRoZQ0KICAgICAgUHJvY2Vzc0Z1bmN0aW9uIHBhZ2UuIDxicj4NCiAgICA8L2Rpdj4NCiAg ICA8ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPjxicj4NCiAgICA8L2Rpdj4NCiAgICA8 ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPjxhIGNsYXNzPSJtb3otdHh0LWxpbmstZnJl ZXRleHQiIGhyZWY9Imh0dHBzOi8vY2kuYXBhY2hlLm9yZy9wcm9qZWN0cy9mbGluay9mbGlu ay1kb2NzLXJlbGVhc2UtMS4yL2Rldi9zdHJlYW0vcHJvY2Vzc19mdW5jdGlvbi5odG1sIj5o dHRwczovL2NpLmFwYWNoZS5vcmcvcHJvamVjdHMvZmxpbmsvZmxpbmstZG9jcy1yZWxlYXNl LTEuMi9kZXYvc3RyZWFtL3Byb2Nlc3NfZnVuY3Rpb24uaHRtbDwvYT48L2Rpdj4NCiAgICA8 ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPjxicj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2 IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPkJlc3QgcmVnYXJkcyw8L2Rpdj4NCiAgICA8ZGl2 IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPktpZW48YnI+DQogICAgPC9kaXY+DQogICAgPGRp diBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij48YnI+DQogICAgPC9kaXY+DQogICAgPGRpdiBj bGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiA5LzUvMjAxNyAxMTo0OSBBTSwgTmF2bmVldGgg S3Jpc2huYW4NCiAgICAgIHdyb3RlOjxicj4NCiAgICA8L2Rpdj4NCiAgICA8YmxvY2txdW90 ZSB0eXBlPSJjaXRlIg0KY2l0ZT0ibWlkOkNBK1lZOEpaTmNfZ1JIMXJGR3otQVhHa0dLU1Qw LWhaVjdBYT1HT3JvQVowZEhRcmkyZ0BtYWlsLmdtYWlsLmNvbSI+DQogICAgICA8ZGl2IGRp cj0ibHRyIj5IaSBBbGwsDQogICAgICAgIDxkaXY+PGJyPg0KICAgICAgICA8L2Rpdj4NCiAg ICAgICAgPGRpdj5JIGhhdmUgYSBzdHJlYW1pbmcgcGlwZWxpbmUgd2hpY2ggaXMga2V5ZWQg YnkgdXNlcmlkIGFuZA0KICAgICAgICAgIHRoZW4gdG8gYSBmbGF0bWFwIGZ1bmN0aW9uLiBJ IG5lZWQgdG8gY2xlYXIgdGhlIHN0YXRlIGFmdGVyDQogICAgICAgICAgc29tZXRpbWUgYW5k IEkgd2FzIGxvb2tpbmcgYXQgcHJvY2VzcyBmdW5jdGlvbiBmb3IgaXQuPC9kaXY+DQogICAg ICAgIDxkaXY+PGJyPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdj5JbnNpZGUgdGhl IHByb2Nlc3MgZWxlbWVudCBmdW5jdGlvbiBpZiBJIHJlZ2lzdGVyIGEgdGltZXINCiAgICAg ICAgICB3b3VsZG4ndCBpdCBjcmVhdGUgYSB0aW1lciBmb3IgZWFjaCBpbmNvbWluZyBtZXNz YWdlPzwvZGl2Pg0KICAgICAgICA8ZGl2Pg0KICAgICAgICAgIDxwcmUgc3R5bGU9ImJveC1z aXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO2ZvbnQtZmFtaWx5Ok1lbmxvLCZxdW90 O0x1Y2lkYSBDb25zb2xlJnF1b3Q7LG1vbm9zcGFjZTtmb250LXNpemU6MTJweDtwYWRkaW5n OjkuNXB4O21hcmdpbi10b3A6MHB4O21hcmdpbi1ib3R0b206MTBweDtsaW5lLWhlaWdodDox LjQyODU3O2NvbG9yOnJnYig1MSw1MSw1MSk7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13 cmFwOmJyZWFrLXdvcmQ7YmFja2dyb3VuZDpyZ2IoMjQ3LDI0NywyNDcpO2JvcmRlcjpub25l O2JvcmRlci1yYWRpdXM6NHB4Ij48Y29kZSBjbGFzcz0iZ21haWwtbGFuZ3VhZ2UtamF2YSIg c3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTpNZW5sbywmcXVvdDtM dWNpZGEgQ29uc29sZSZxdW90Oyxtb25vc3BhY2U7Zm9udC1zaXplOmluaGVyaXQ7cGFkZGlu ZzowcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1yYWRp dXM6MHB4O3doaXRlLXNwYWNlOnByZS13cmFwIj48c3BhbiBjbGFzcz0iZ21haWwtYzEiIHN0 eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6cmdiKDE1MywxNTMsMTM2KTtmb250 LXN0eWxlOml0YWxpYyI+Ly8gc2NoZWR1bGUgdGhlIG5leHQgdGltZXIgNjAgc2Vjb25kcyBm cm9tIHRoZSBjdXJyZW50IGV2ZW50IHRpbWU8L3NwYW4+DQogICAgICAgIDxzcGFuIGNsYXNz PSJnbWFpbC1uIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94Ij5jdHg8L3NwYW4+PHNw YW4gY2xhc3M9ImdtYWlsLW8iIHN0eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC13 ZWlnaHQ6Ym9sZCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbmEiIHN0eWxlPSJib3gt c2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6cmdiKDAsMTI4LDEyOCkiPnRpbWVyU2VydmljZTwv c3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbyIgc3R5bGU9ImJveC1zaXppbmc6Ym9yZGVyLWJv eDtmb250LXdlaWdodDpib2xkIj4oKS48L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWlsLW5hIiBz dHlsZT0iYm94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnJnYigwLDEyOCwxMjgpIj5yZWdp c3RlckV2ZW50VGltZVRpbWVyPC9zcGFuPjxzcGFuIGNsYXNzPSJnbWFpbC1vIiBzdHlsZT0i Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtd2VpZ2h0OmJvbGQiPig8L3NwYW4+PHNwYW4g Y2xhc3M9ImdtYWlsLW4iIHN0eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3giPmN1cnJlbnQ8 L3NwYW4+PHNwYW4gY2xhc3M9ImdtYWlsLW8iIHN0eWxlPSJib3gtc2l6aW5nOmJvcmRlci1i b3g7Zm9udC13ZWlnaHQ6Ym9sZCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbmEiIHN0 eWxlPSJib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6cmdiKDAsMTI4LDEyOCkiPnRpbWVz dGFtcDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImdtYWlsLW8iIHN0eWxlPSJib3gtc2l6aW5nOmJv cmRlci1ib3g7Zm9udC13ZWlnaHQ6Ym9sZCI+Kzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImdtYWls LW1pIiBzdHlsZT0iYm94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnJnYigwLDE1MywxNTMp Ij42MDAwMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ21haWwtbyIgc3R5bGU9ImJveC1zaXppbmc6 Ym9yZGVyLWJveDtmb250LXdlaWdodDpib2xkIj4pOzwvc3Bhbj48L2NvZGU+PC9wcmU+DQog ICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2PkhvdyBjYW4gSSBnZXQgc29tZXRoaW5nIGxp a2UgYSBjbGVhbiB1cCB0YXNrIHRoYXQgcnVucw0KICAgICAgICAgIGV2ZXJ5IDIgbWlucyBh bmQgZXZpY3RzIGFsbCBzdGFsZSBkYXRhPyBBbHNvIGlzIHRoZXJlIGEgd2F5IHRvDQogICAg ICAgICAgZ2V0IHRoZSBrZXkgaW5zaWRlIG9uVGltZXIgZnVuY3Rpb24gc28gdGhhdCBJIGtu b3cgd2hpY2gga2V5DQogICAgICAgICAgaGFzIHRvIGJlIGV2aWN0ZWQ/PC9kaXY+DQogICAg ICAgIDxkaXY+PGJyPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdj5UaGFua3MsPC9k aXY+DQogICAgICAgIDxkaXY+TmF2bmVldGg8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwv YmxvY2txdW90ZT4NCiAgPC9ib2R5Pg0KPC9odG1sPg0K --------------BC527DD9950592CFF321F481--