Cel opracowania

Głównym celem tego opracowania jest uaktualnienie danych z poprzedniej publikacji dotyczącej śródrocznego modelu zapadalności na grypę, dostępnego tutaj: https://rpubs.com/bartriman/C19_PL_20_21 Dla przypomnienia w pierwszej publikacji pokazane zostały dane z ostatnich 24 lat (okres 1996 - 2020) zebrane z publikowanych co dwa tygodnie raportóW PZH. Poadtno pokazano trwającą epidemię koronawirusa na tle ostatnich 10 sezonów grypy, przytaczając badania, według których udział koronawirusa w sezona grypowych wynosi zazwyczaj od 7 do 15% ogółu zachorowań na grypę. W niektórych komentarzach, podniesiona została kwestia, że Covid - 19 to nie grypa i NIE WOLNO pokazywać tych danych na świetle sezonowej grypy.

Zatem dla przypomnienia, jaka jest definicja grypy (obejmuje dwa zespoły objawów: A. zachorowania grypopodobne i B. ostre infekcje górnych dróg oddechowych):

A. Zachorowanie grypopodobne

Nagłe wystąpienie objawów ORAZ co najmniej jeden z następujących czterech objawów ogólnych:

ORAZ co najmniej jeden z następujących trzech objawów oddechowych:

B. Ostre zakażenie dróg oddechowych

Nagłe wystąpienie objawów ORAZ co najmniej jeden z następujących czterech objawów oddechowych:

Definicja Covid-19:

Jak widać kryteria kliniczne poza utratą węchu / smaku - są identyczne. Ponieważ zatem: koronawirus w literaturze medycznej i EBM był traktowany jako jeden z wirusów wywołujących grypę, a objawy kliniczne tego wirusa, z którym mamy obecnie do czynienia są niemalże identyczne, wydaje się być zasadne, pokazanie danych o zachorowalaności na COVID-19 na tle danych o grypie sezonowej.

Dla zainteresowanych, w poprzednim materiale prezentowany jest kod, który zebrał dane ze stron PZH.

Dane uaktualnione do marca 2021 1

Na moment pisania niniejszego opracowania dostępnych jest 650 meldunków.

Po zebranu danych z plików pdf pobranych ze stron PZH, został utworzony zestaw danych zawierający ilość przypadków zachorowań na grypę w interwałach dwutygodniowych. Dane zawierają 648 obserwacji za okres od 1996-01-01 do 2020-04-15.

Pierwsze spojrzenie na dane wyodrębnione z plików pdf:

Trendy długoterminowe prezentuje wykres rocznej ilości przypadków:

Dane roczne dają pewien pogląd w długim okresie. Jednak jak widać, poziom zachorowań w 2021 jest niezwykle niski, co oczywiście wynika z faktu, że na ten moment są dostępne dane tylko za okres 01.01 - 15.04.2021.

Dlatego podobnie jak w pierwszym materiale, połówki lat zostały połączone w jeden sezon. Lipiec jest pierwszym miesiącem sezonu, czerwiec ostatnim.

Wybrane dane z lat 2016-2021 pokazują następujący przebieg zachorowalności na grypę w ciągu roku:

Widać wyraźnie, że przebieg sezonu grypowego 2020/2021 jest odmienny od znanego z ostatnich 5 lat. Szczyt zachorowań nastąpił w pierwszej fali sezonu, tj. w październiku. Druga fala, która z reguły miała miajesce w miesiącach grudzień - luty i była większa od pierwszej, w bieżącym sezonie wykazała się zdecydowanie mniejszą dynamiką.

W następnym kroku sprawdzimy, jak wyglądałby przebieg sezonu grypowego 2020/2021, gdyby połączyć ze sobą dane o grypie sezonowej i wykrytych przypadkach koronawirusa.

Po połączeniu danych o zapadalności na grypę sezonową i na koronawirusa widać jeszcze dokładniej odmienny przebieg sezonu grypowego. Szczyt łącznych zachorowań na grypę i koronawirusa przypadł co prawda w marcu 2021 jednak pierwszy szczyt z listopada 2020, jest niemal równy temu z marca. Zazwyczaj pierwsza fala grypy była o połowę niższa od drugiej fali w sezonie.

Czy odmienna śródroczna struktura wpłnęła na całokształt sezonu? Odpowiedź daje poniższy wykres, na którym widać dane narastająco w ostatnich pięciu sezonach:

Jak widać sezon 2020/2021 nie różni się istotnie od ostatnich pięciu sezonów grypowych. Krzywa narastających zachorowań rozwija się w okolicach średniej z wybranych sezonów, przy czym można zauważyć, że obecny sezon jest nieco łagodniejszy od poprzednich, w szczególności od sezonu 2017/2018.

Dla uzupełnienia obrazu sezonu 2020/2021 moża przyjżeć się przebiegowi grypy sezonowej i koronawirusa osobno:

Jeszcze na początku sezonu wydawało się, że grypa sezonowa dalej będzie przeważać, a udział koronawirusa będzie kształtował się blisko 15%, jak wskazywały badania przytoczone w poprzednim materiale. Jednak już we wrześniu 2020 udział koronawirusa w zachorowaniach grypopodobnych wyniósł 17% a w październiku 35%. Cały sezon 2020/2021 to udział 60% koronawirusa w zachorowaniach grypopodobnych. Nawet biorąc pod uwagę jakość testów, wysoki procent testów fałszywie dodatnich oraz fakt, że pozytywny wynik testu nie oznacza choroby, można stwierdzić na podstawie tych danych, że ten sezon “należy” do koronawirusa.

Powyższe dane i wykresy pokazują odmienność sezonu grypowego 2020/2021 od ostatnich 5 sezonów, głównie ze względu na dwie cechy:

Jednak ogólna ilość zachorowań, która rozwija się w granicach wyznaczonych przez średnią z lat poprzednich (wykres prezentujący dane narastająco), każe kwestionować zasadność działań MZ, w szczególności politykę DDM, zamknięcię wybranych sektorów gospodarki oraz przede wszystkim reorganizację służby zdrowia w tryb epidemiczny.


  1. Wszystkie dane pochodzą z raportów “Meldunki o zachorowaniach na choroby zakaźne, zakażeniach i zatruciach w Polsce (dwutygodniowe)” publikowanych na stronach NIZP-PZH / PIS, ZAKŁAD EPIDEMIOLOGII CHORÓB ZAKAŹNYCH I NADZORU Pracownia Monitorowania i Analizy Sytuacji Epidemiologicznej: NIZP-PZH↩︎

  2. Dla przypomnienia, w poniższych badaniach sprawdzanu udział poszczególnych szczepów wirusów, w zachorowaniach na grypę i przeziębienia. Wniosek z tych badań był taki, że udział koronawirusa wynosi zazwyczaj od 7 do 15 procent. 1. “Virus–virus interactions impact the population dynamics of influenza and the common cold”, PNAS December 26, 2019 116 (52) 27142-27150; first published December 16, 2019, Sema Nickbakhsh, Colette Mair, Louise Matthews, Richard Reeve, Paul C. D. Johnson, Fiona Thorburn, Beatrix von Wissmann, Arlene Reynolds, James McMenamin, Rory N. Gunson, and Pablo R. Murcia PNAS 2. “Epidemiology of Seasonal Coronaviruses: Establishing the Context for the Emergence of Coronavirus Disease 2019”, The Journal of Infectious Diseases, 01 Jun 2020, 222(1):17-25, EUROPE PMC↩︎

LS0tDQp0aXRsZTogIsWacsOzZHJvY3pueSBtb2RlbCB6YXBhZGFsbm/Fm2NpIG5hIGdyeXDEmSAtIHVwZGF0ZSBuYSAxNSBrd2lldG5pYSAyMDIxIg0KYXV0aG9yOiAiQmFydGVrIEJpZWxza2kiDQpkYXRlOiAnMjAyMS0wNC0yMCcNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBDZWwgb3ByYWNvd2FuaWENCkfFgsOzd255bSBjZWxlbSB0ZWdvIG9wcmFjb3dhbmlhIGplc3QgdWFrdHVhbG5pZW5pZSBkYW55Y2ggeiBwb3ByemVkbmllaiBwdWJsaWthY2ppIGRvdHljesSFY2VqIMWbcsOzZHJvY3puZWdvIG1vZGVsdSB6YXBhZGFsbm/Fm2NpIG5hIGdyeXDEmSwgZG9zdMSZcG5lZ28gdHV0YWo6IGh0dHBzOi8vcnB1YnMuY29tL2JhcnRyaW1hbi9DMTlfUExfMjBfMjENCkRsYSBwcnp5cG9tbmllbmlhIHcgcGllcndzemVqIHB1Ymxpa2FjamkgcG9rYXphbmUgem9zdGHFgnkgZGFuZSB6IG9zdGF0bmljaCAyNCBsYXQgKG9rcmVzIDE5OTYgLSAyMDIwKSB6ZWJyYW5lIHogcHVibGlrb3dhbnljaCBjbyBkd2EgdHlnb2RuaWUgcmFwb3J0w7NXIFBaSC4gUG9hZHRubyBwb2themFubyB0cndhasSFY8SFIGVwaWRlbWnEmSBrb3JvbmF3aXJ1c2EgbmEgdGxlIG9zdGF0bmljaCAxMCBzZXpvbsOzdyBncnlweSwgcHJ6eXRhY3phasSFYyBiYWRhbmlhLCB3ZWTFgnVnIGt0w7NyeWNoIHVkemlhxYIga29yb25hd2lydXNhIHcgc2V6b25hIGdyeXBvd3ljaCB3eW5vc2kgemF6d3ljemFqIG9kIDcgZG8gMTUlIG9nw7PFgnUgemFjaG9yb3dhxYQgbmEgZ3J5cMSZLiBXIG5pZWt0w7NyeWNoIGtvbWVudGFyemFjaCwgcG9kbmllc2lvbmEgem9zdGHFgmEga3dlc3RpYSwgxbxlIENvdmlkIC0gMTkgdG8gbmllIGdyeXBhIGkgTklFIFdPTE5PIHBva2F6eXdhxIcgdHljaCBkYW55Y2ggbmEgxZt3aWV0bGUgc2V6b25vd2VqIGdyeXB5LiANCg0KWmF0ZW0gZGxhIHByenlwb21uaWVuaWEsIGpha2EgamVzdCBkZWZpbmljamEgZ3J5cHkgKG9iZWptdWplIGR3YSB6ZXNwb8WCeSBvYmphd8OzdzogKipBLioqIHphY2hvcm93YW5pYSBncnlwb3BvZG9ibmUgaSAqKkIuKiogb3N0cmUgaW5mZWtjamUgZ8Ozcm55Y2ggZHLDs2cgb2RkZWNob3d5Y2gpOg0KDQpBLiBaYWNob3Jvd2FuaWUgZ3J5cG9wb2RvYm5lDQoNCk5hZ8WCZSB3eXN0xIVwaWVuaWUgb2JqYXfDs3cgT1JBWiBjbyBuYWptbmllaiBqZWRlbiB6IG5hc3TEmXB1asSFY3ljaCBjenRlcmVjaCBvYmphd8OzdyBvZ8OzbG55Y2g6IA0KDQotIGdvcsSFY3prYSBsdWIgc3RhbiBwb2Rnb3LEhWN6a293eSwgDQotIHrFgmUgc2Ftb3BvY3p1Y2llLCANCi0gYsOzbGUgZ8WCb3d5LCANCi0gYsOzbGUgbWnEmcWbbmlvd2UsIA0KDQpPUkFaIGNvIG5ham1uaWVqIGplZGVuIHogbmFzdMSZcHVqxIVjeWNoIHRyemVjaCBvYmphd8OzdyBvZGRlY2hvd3ljaDoNCg0KLSBrYXN6ZWwsIA0KLSBiw7NsIGdhcmTFgmEsIA0KLSBkdXN6bm/Fm8SHLiANCg0KQi4gT3N0cmUgemFrYcW8ZW5pZSBkcsOzZyBvZGRlY2hvd3ljaCANCg0KTmFnxYJlIHd5c3TEhXBpZW5pZSBvYmphd8OzdyBPUkFaIGNvIG5ham1uaWVqIGplZGVuIHogbmFzdMSZcHVqxIVjeWNoIGN6dGVyZWNoIG9iamF3w7N3IG9kZGVjaG93eWNoOg0KDQotIGthc3plbCwgDQotIGLDs2wgZ2FyZMWCYSwgDQotIGR1c3pub8WbxIcsIA0KLSBuaWXFvHl0IMWbbHV6b3d5IG5vc2EuDQoNCg0KRGVmaW5pY2phIENvdmlkLTE5Og0KDQotIGthc3plbCwNCi0gZ29yxIVjemthLA0KLSBkdXN6bm/Fm8SHLA0KLSB1dHJhdGEgd8SZY2h1IG8gbmFnxYJ5bSBwb2N6xIV0a3UsDQotIHV0cmF0YSBsdWIgemFidXJ6ZW5pYSBzbWFrdSBvIG5hZ8WCeW0gcG9jesSFdGt1Lg0KDQoNCg0KSmFrIHdpZGHEhyBrcnl0ZXJpYSBrbGluaWN6bmUgcG96YSB1dHJhdMSFIHfEmWNodSAvIHNtYWt1IC0gc8SFIGlkZW50eWN6bmUuIFBvbmlld2HFvCB6YXRlbToga29yb25hd2lydXMgdyBsaXRlcmF0dXJ6ZSBtZWR5Y3puZWogaSBFQk0gYnnFgiB0cmFrdG93YW55IGpha28gamVkZW4geiB3aXJ1c8OzdyB3eXdvxYJ1asSFY3ljaCBncnlwxJksIGEgb2JqYXd5IGtsaW5pY3puZSB0ZWdvIHdpcnVzYSwgeiBrdMOzcnltIG1hbXkgb2JlY25pZSBkbyBjenluaWVuaWEgc8SFIG5pZW1hbMW8ZSBpZGVudHljem5lLCB3eWRhamUgc2nEmSBiecSHIHphc2FkbmUsIHBva2F6YW5pZSBkYW55Y2ggbyB6YWNob3Jvd2FsYW5vxZtjaSBuYSBDT1ZJRC0xOSBuYSB0bGUgZGFueWNoIG8gZ3J5cGllIHNlem9ub3dlai4gDQoNCkRsYSB6YWludGVyZXNvd2FueWNoLCB3IHBvcHJ6ZWRuaW0gbWF0ZXJpYWxlIHByZXplbnRvd2FueSBqZXN0IGtvZCwga3TDs3J5IHplYnJhxYIgZGFuZSB6ZSBzdHJvbiBQWkguIA0KDQoNCiMjIyBEYW5lIHVha3R1YWxuaW9uZSBkbyBtYXJjYSAyMDIxIFteMV0NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgV3ltYWdhbmUgYmlibGlvdGVraQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUG9icmFuaWUgY2HFgmVnbyBhcmNoaXd1bSBtZWxkdW5rw7N3IG8gemFjaG9yb3dhbmlhY2ggbmEgY2hvcm9ieSB6YWthxbpuZSwgemFrYcW8ZW5pYWNoIGkgemF0cnVjaWFjaCB3IFBvbHNjZSAoZHd1dHlnb2RuaW93ZSwga3dhcnRhbG5lLCBww7PFgnJvY3puZSwgcm9jem5lKQ0KdXJsIDwtICJodHRwOi8vd3d3b2xkLnB6aC5nb3YucGwvb2xkcGFnZS9lcGltZWxkL2luZGV4X3AuaHRtbCINCnB6aG9sZHdwIDwtIHJlYWRfaHRtbCh1cmwpDQpsaW5rcyA8LSBwemhvbGR3cCAlPiUgaHRtbF9ub2RlcygiYSIpICU+JSBodG1sX2F0dHIoImhyZWYiKQ0KbGlua3MgPC0gZ3JlcCgiaW5kZXhfbXAuaHRtbCQiLCBsaW5rcywgdmFsdWUgPSBUUlVFKQ0KbGlua3MgPC0gcGFzdGUwKCJodHRwOi8vd3d3b2xkLnB6aC5nb3YucGwvb2xkcGFnZS9lcGltZWxkLyIsbGlua3MpDQp5cnMgPC0gYXMuZGF0YS5mcmFtZShzdHJpbmdyOjpzdHJfZXh0cmFjdChsaW5rcywgIlxcZHs0fSIpKQ0KbDJwIDwtIGRhdGEuZnJhbWUoKQ0KZm9yIChpIGluIDE6bGVuZ3RoKHlyc1ssMV0pKXsNCnVybDIgPC0gbGlua3NbaV0NCnB6aFlSIDwtIHJlYWRfaHRtbCh1cmwyKQ0KbGlua3MycGRmIDwtIHB6aFlSICU+JSBodG1sX25vZGVzKCJhIikgJT4lIGh0bWxfYXR0cigiaHJlZiIpDQpsaW5rczJwZGYgPC0gZ3JlcCgicGRmJCIsIGxpbmtzMnBkZiwgdmFsdWUgPSBUUlVFKQ0KbGlua3MycGRmIDwtIGFzLmRhdGEuZnJhbWUocGFzdGUwKCJodHRwOi8vd3d3b2xkLnB6aC5nb3YucGwvb2xkcGFnZS9lcGltZWxkLyIseXJzW2ksXSwiLyIsbGlua3MycGRmKSkNCmwycCA8LSByYmluZChsMnAsIGxpbmtzMnBkZikNCn0NCmRpci5jcmVhdGUoInBkZjIiKQ0KcHRoIDwtIHBhc3RlMChnZXR3ZCgpLCIvcGRmMi8iKQ0KZm9yIChpIGluIDE6bGVuZ3RoKGwycFssMV0pKXsNCmZuYW1lIDwtIHN0cmluZ3I6OnN0cl9zdWIobDJwW2ksXSwgLTE1LCAtMSkNCmZuYW1lIDwtIHN0cmluZ3I6OnN0cl9yZW1vdmUoZm5hbWUsICJbLy9dIikNCmh0dHI6OkdFVChsMnBbaSxdLCBodHRyOjphdXRoZW50aWNhdGUoIjoiLCAiOiIsIHR5cGU9Im50bG0iKSwNCiAgICAgICAgICBodHRyOjp3cml0ZV9kaXNrKHBhc3RlMChwdGgsZm5hbWUpLCBvdmVyd3JpdGUgPSBUUlVFKSwNCiAgICAgICAgICBodHRyOjpwcm9ncmVzcygpDQogICAgICAgICAgKQ0KfQ0KYGBgDQoNCk5hIG1vbWVudCBwaXNhbmlhIG5pbmllanN6ZWdvIG9wcmFjb3dhbmlhIGRvc3TEmXBueWNoIGplc3QgKio2NTAqKiBtZWxkdW5rw7N3Lg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyAiU2NyYXBwaW5nIiBwbGlrw7N3IHBkZg0KbGlicmFyeShwZGZ0b29scykNCmxpYnJhcnkoc3RyaW5ncikNCiMgbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHBsb3RseSkNCg0KbGlzdGFfcGxpa293IDwtIGxpc3QuZmlsZXMocGF0aCA9ICJwZGYyLyIpDQpncnlwYSA8LSBkYXRhLmZyYW1lKCkNCg0KZm9yIChpIGluIDE6bGVuZ3RoKGxpc3RhX3BsaWtvdykpew0KdGV4dF9yZXBfdGVtcCA8LSBwZGZfdGV4dChwZGYgPSBwYXN0ZTAoInBkZjIvIixsaXN0YV9wbGlrb3dbaV0pKQ0KdGV4dF9yZXBfdGVtcCA8LSBjKHVubGlzdChzdHJzcGxpdCh0ZXh0X3JlcF90ZW1wLCAiXHJcbiIpKSkNCiMgd3JpdGUodGV4dF9yZXBfdGVtcCwgZmlsZSA9ICJ0ZXN0LnR4dCIpDQp3YW50ZWRfbGluZXMgPC0gYyhncmVwKCJHcnlwYSIsdGV4dF9yZXBfdGVtcClbMV0sDQogICAgICAgICAgICAgICAgICBncmVwKCJ6Z8WCb3N6b255Y2ggdyBva3Jlc2llIG9kIHxvIHpnxYJvc3pvbnljaCB6YWNob3Jvd2FuaWFjaCB6YSBva3JlcyBvZCIsdGV4dF9yZXBfdGVtcClbMV0NCiAgICAgICAgICAgICAgICAgICkNCndhbnRlZCA8LSB0ZXh0X3JlcF90ZW1wW2dldCgid2FudGVkX2xpbmVzIildDQpkYXRhX3JhcG9ydHUgPC0gc3RyX2V4dHJhY3Qod2FudGVkWzJdLCAiXFxkezJ9LlxcZHsyfS5cXGR7NH0iKQ0KZGF0YV9yYXBvcnR1IDwtIGx1YnJpZGF0ZTo6ZG15KGRhdGFfcmFwb3J0dSkNCndhbnRlZFsxXQ0KaWxvc2NfcHJ6eXAgPC0gYXMubnVtZXJpYyhzdHJfZXh0cmFjdCh3YW50ZWRbMV0sICJcXHNcXGQrIikpDQp3aWVyc3ogPC0gZGF0YS5mcmFtZShkYXRhX3JhcG9ydHUsIGlsb3NjX3ByenlwKSANCmdyeXBhIDwtIHJiaW5kKGdyeXBhLCB3aWVyc3opDQp9DQoNCmdyeXBhIDwtIGdyeXBhW2NvbXBsZXRlLmNhc2VzKGdyeXBhKSxdDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIERhbmUgcG8gMjAwOCAtIHptaWFuYSBmb3JtYXR1IHJhcG9ydHUgKGRhdGEgamVzdCB3ZSB3xYJhxZtjaXdvxZtjaWFjaCBwbGlrdSwgZGFuZSBvIHphY2hvcm93YW5pYW4gc8SFIHByZXplbnRvd2FuZSBuYXJhc3RhasSFY28pDQoNCmdyeXBhMDggPC0gZGF0YS5mcmFtZSgpDQpmb3IgKGkgaW4gMTpsZW5ndGgobGlzdGFfcGxpa293KSl7DQp0ZXh0X3JlcF90ZW1wMDggPC0gcGRmX3RleHQocGRmID0gcGFzdGUwKCJwZGYyLyIsbGlzdGFfcGxpa293W2ldKSkNCnRleHRfcmVwX3RlbXAwOCA8LSBjKHVubGlzdChzdHJzcGxpdCh0ZXh0X3JlcF90ZW1wMDgsICJcclxuIikpKQ0Kd2FudGVkX2xpbmVzMDggPC0gYyhncmVwKCJHcnlwYSBpIHBvZGVqcnplbmlhIix0ZXh0X3JlcF90ZW1wMDgpWzFdDQogICAgICAgICAgICAgICAgICApDQp3YW50ZWQwOF9kYXRhX3JhcG9ydHUgPC0gcGRmX2luZm8ocGRmID0gcGFzdGUwKCJwZGYyLyIsbGlzdGFfcGxpa293W2ldKSkka2V5cyRUaXRsZQ0Kd2FudGVkMDggPC0gdGV4dF9yZXBfdGVtcDA4W2dldCgid2FudGVkX2xpbmVzMDgiKV0NCmRhdGFfcmFwb3J0dTA4IDwtIHN0cl9leHRyYWN0KHdhbnRlZDA4X2RhdGFfcmFwb3J0dSwgIlxcZHsyfS5cXGR7Mn1cXHNcXGR7NH18XFxkezJ9LlxcZHsyfS5cXGR7NH0iKQ0KZGF0YV9yYXBvcnR1MDggPC0gbHVicmlkYXRlOjpkbXkoZGF0YV9yYXBvcnR1MDgpDQppbG9zY19wcnp5cDA4IDwtIGFzLm51bWVyaWMoZ3N1YigiXFxzIiwiIiwoc3RyX2V4dHJhY3Qod2FudGVkMDhbMV0sICIoXFxzXFxkKyl7MSwzfSIpKSkpDQp3aWVyc3owOCA8LSBkYXRhLmZyYW1lKGRhdGFfcmFwb3J0dTA4LCBpbG9zY19wcnp5cDA4KSANCmdyeXBhMDggPC0gcmJpbmQoZ3J5cGEwOCwgd2llcnN6MDgpDQp9DQpncnlwYTA4IDwtIGdyeXBhMDhbY29tcGxldGUuY2FzZXMoZ3J5cGEwOCksXQ0KDQojIG9ibGljemVuaWUgaWxvxZtjaSBub3d5Y2ggcHJ6eXBhZGvDs3cgKHV3YWdhIG5hIGRhbmUgeiBrb8WEY2Egcm9rdSkNCm5vd2VfcHJ5cF8wOCA8LSBkaWZmKGdyeXBhMDgkaWxvc2NfcHJ6eXAwOCkgDQpub3dlX3ByeXBfMDggPC0gYyhncnlwYTA4WzEsMl0sbm93ZV9wcnlwXzA4KQ0KZ3J5cGEwOCA8LSBjYmluZChncnlwYTA4LCBub3dlX3ByeXBfMDgpDQoNCiNwb3ByYXdhIGRhbnljaCB6IGtvxYRjYSByb2t1IGkgcGllcndzemVnbyByYXBvcnR1IHogcG9jesSFdGt1IG5vd2VnbyByb2t1DQp0ZW1wX2RzIDwtIHN1YnNldChncnlwYTA4LCBub3dlX3ByeXBfMDggPDApDQp0ZW1wX2RzJG5vd2VfcHJ5cF8wOCA8LSB0ZW1wX2RzJGlsb3NjX3ByenlwMDgNCmdyeXBhMDhhIDwtIHN1YnNldChncnlwYTA4LCBub3dlX3ByeXBfMDggPiAwKQ0KZ3J5cGEwOGEgPC0gcmJpbmQoZ3J5cGEwOGEsIHRlbXBfZHMpDQpncnlwYTA4YSA8LSBncnlwYTA4YVtvcmRlcihncnlwYTA4YSRkYXRhX3JhcG9ydHUwOCksXQ0KZ3J5cGEwOGEgPC0gZ3J5cGEwOGFbLGMoMSwzKV0NCg0KDQojIFBvxYLEhWN6ZW5pZSBkYW55Y2ggZG8gMjAwOCBpIHBvLCB3IGNhxYJvxZvEhw0KY24gPC0gY29sbmFtZXMoZ3J5cGEpDQpjb2xuYW1lcyhncnlwYTA4YSkgPC0gY24NCmdyeXBhX2NhbG9zYyA8LSByYmluZChncnlwYSwgZ3J5cGEwOGEpDQpncnlwYV9jYWxvc2MgPC0gZ3J5cGFfY2Fsb3NjW29yZGVyKGdyeXBhX2NhbG9zYyRkYXRhX3JhcG9ydHUpLF0NCmBgYA0KDQpQbyB6ZWJyYW51IGRhbnljaCB6IHBsaWvDs3cgcGRmIHBvYnJhbnljaCB6ZSBzdHJvbiBQWkgsIHpvc3RhxYIgdXR3b3J6b255IHplc3RhdyBkYW55Y2ggemF3aWVyYWrEhWN5IGlsb8WbxIcgcHJ6eXBhZGvDs3cgemFjaG9yb3dhxYQgbmEgZ3J5cMSZIHcgaW50ZXJ3YcWCYWNoIGR3dXR5Z29kbmlvd3ljaC4gRGFuZSB6YXdpZXJhasSFIDY0OCBvYnNlcndhY2ppIHphIG9rcmVzIG9kIDE5OTYtMDEtMDEgZG8gMjAyMC0wNC0xNS4NCg0KUGllcndzemUgc3BvanJ6ZW5pZSBuYSBkYW5lIHd5b2RyxJlibmlvbmUgeiBwbGlrw7N3IHBkZjoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCnd5ayA8LSBwbG90X2x5KGRhdGE9Z3J5cGFfY2Fsb3NjLCB4ID0gfmRhdGFfcmFwb3J0dSAsIHkgPSB+aWxvc2NfcHJ6eXAsIHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbGluZXMnKQ0Kd3lrIDwtIHd5ayAlPiUgbGF5b3V0KHRpdGxlID0gIlphY2hvcm93YW5pYSBuYSBncnlwxJkgdyBsYXRhY2ggMTk5Ni0yMDIwIChkYW5lIGR3dXR5Z29kbmlvd2UpIiwNCiAgICAgICAgICAgICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUm9rIiksIHlheGlzID0gbGlzdCh0aXRsZSA9ICJJbG/Fm8SHIHphY2hvcm93YcWEIikNCiAgICAgICAgICAgICAgICAgICAgICApDQp3eWsNCmBgYA0KDQpUcmVuZHkgZMWCdWdvdGVybWlub3dlIHByZXplbnR1amUgd3lrcmVzIHJvY3puZWogaWxvxZtjaSBwcnp5cGFka8OzdzoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoZHBseXIpDQpncnlwYV9jYWxvc2Mkcm9rIDwtIHllYXIoZ3J5cGFfY2Fsb3NjJGRhdGFfcmFwb3J0dSkNCmdyeXBhX2NhbG9zY19yb2N6bmllIDwtIGdyeXBhX2NhbG9zYyAlPiUgZ3JvdXBfYnkocm9rKSAlPiUgc3VtbWFyaXNlKHN1bWFfcHJ6eXBhZGtvdyA9IHN1bShpbG9zY19wcnp5cCkpDQpncnlwYV9jYWxvc2MkbXNjIDwtIG1vbnRoKGdyeXBhX2NhbG9zYyRkYXRhX3JhcG9ydHUpIA0Kd3lrMiA8LSBwbG90X2x5KGRhdGE9Z3J5cGFfY2Fsb3NjX3JvY3puaWUsIHggPSB+cm9rICwgeSA9IH5zdW1hX3ByenlwYWRrb3csIHR5cGUgPSAnYmFyJykNCnd5azIgPC0gd3lrMiAlPiUgbGF5b3V0KHRpdGxlID0gIlphY2hvcm93YW5pYSBuYSBncnlwxJkgdyBsYXRhY2ggMTk5Ni0yMDIxIChwb2RzdW1vd2FuaWUgcm9jem5lKSIsDQogICAgICAgICAgICAgICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlJvayIpLCB5YXhpcyA9IGxpc3QodGl0bGUgPSAiSWxvxZvEhyB6YWNob3Jvd2HFhCIpDQogICAgICAgICAgICAgICAgICAgICAgKQ0Kd3lrMg0KYGBgDQoNCkRhbmUgcm9jem5lIGRhasSFIHBld2llbiBwb2dsxIVkIHcgZMWCdWdpbSBva3Jlc2llLiBKZWRuYWsgamFrIHdpZGHEhywgcG96aW9tIHphY2hvcm93YcWEIHcgMjAyMSBqZXN0IG5pZXp3eWtsZSBuaXNraSwgY28gb2N6eXdpxZtjaWUgd3luaWthIHogZmFrdHUsIMW8ZSBuYSB0ZW4gbW9tZW50IHPEhSBkb3N0xJlwbmUgZGFuZSB0eWxrbyB6YSBva3JlcyAwMS4wMSAtIDE1LjA0LjIwMjEuDQoNCkRsYXRlZ28gcG9kb2JuaWUgamFrIHcgcGllcndzenltIG1hdGVyaWFsZSwgcG/FgsOzd2tpIGxhdCB6b3N0YcWCeSBwb8WCxIVjem9uZSB3IGplZGVuIHNlem9uLiBMaXBpZWMgamVzdCBwaWVyd3N6eW0gbWllc2nEhWNlbSBzZXpvbnUsIGN6ZXJ3aWVjIG9zdGF0bmltLiANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTm9ybWFsaXphY2phIGRhbnljaA0KDQpsaWJyYXJ5KGRwbHlyKQ0KIyBub3JtYWxpemFjamEgPC0gZnVuY3Rpb24oeCkge3JldHVybiAoKHggLSBtaW4oeCkpIC8gKG1heCh4KSAtIG1pbih4KSkpfQ0KZ3J5cGFfY2Fsb3NjX3JybW0gPC0gZ3J5cGFfY2Fsb3NjICU+JSBncm91cF9ieShyb2ssIG1zYykgJT4lIHN1bW1hcmlzZShzdW1hX3ByenlwYWRrb3cgPSBzdW0oaWxvc2NfcHJ6eXApKQ0KZ3J5cGFfY2Fsb3NjX3JybW0kbnJfbWllc2lhY2Ffc2V6b24gPC0gaWZlbHNlKGdyeXBhX2NhbG9zY19ycm1tJG1zYzw9NiwgZ3J5cGFfY2Fsb3NjX3JybW0kbXNjKzYsIGdyeXBhX2NhbG9zY19ycm1tJG1zYy02KQ0KZ3J5cGFfY2Fsb3NjX3JybW0gPC0gZ3J5cGFfY2Fsb3NjX3JybW0gJT4lIG11dGF0ZShldHlraWV0YV9zZXpvbnUgPSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobnJfbWllc2lhY2Ffc2V6b24gPD0gNiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChyb2ssICIvIixyb2srMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChyb2stMSwgIi8iLHJvaykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCmdyeXBhX2NhbG9zY19ycm1tJG1zY19uYXp3YSA8LSBtb250aChncnlwYV9jYWxvc2NfcnJtbSRtc2MsIGxhYmVsID0gVFJVRSkNCg0KIyBub3JtX2RhdGEgPC0gZ3J5cGFfY2Fsb3NjX3JybW0gJT4lIGdyb3VwX2J5KGV0eWtpZXRhX3Nlem9udSkgJT4lIHN1bW1hcmlzZShzdW1hX3ByenlwYWRrb3dfbm9ybSA9IG5vcm1hbGl6YWNqYShzdW1hX3ByenlwYWRrb3cpKQ0KIyANCiMgZ3J5cGFfY2Fsb3NjX3JybW0kc3VtX3Byenlfbm9ybSA8LSBub3JtX2RhdGEkc3VtYV9wcnp5cGFka293X25vcm0NCg0KYGBgDQoNCld5YnJhbmUgZGFuZSB6IGxhdCAyMDE2LTIwMjEgcG9rYXp1asSFIG5hc3TEmXB1asSFY3kgcHJ6ZWJpZWcgemFjaG9yb3dhbG5vxZtjaSBuYSBncnlwxJkgdyBjacSFZ3Ugcm9rdToNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIHd5azMgPC0gcGxvdF9seShkYXRhID0gc3Vic2V0KGdyeXBhX2NhbG9zY19ycm1tLGdyeXBhX2NhbG9zY19ycm1tJGV0eWtpZXRhX3Nlem9udSAlaW4lIA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIjIwMDYvMjAwNyIsIjIwMDcvMjAwOCIsICIyMDA4LzIwMDkiLCAiMjAwOS8yMDEwIiwiMjAxMC8yMDExIiwgIjIwMTEvMjAxMiIsICIyMDEyLzIwMTMiLCAiMjAxMy8yMDE0IiwgIjIwMTQvMjAxNSIsICIyMDE1LzIwMTYiLCAiMjAxNi8yMDE3IiwiMjAxNy8yMDE4IiwiMjAxOC8yMDE5IiwgIjIwMTkvMjAyMCIsICIyMDIwLzIwMjEiKSlbLGMoNDo3KV0sIA0KZ3J5cGFfY2Fsb3NjX3JybW0kc3pjemVwIDwtICJzZXpvbm93YSINCnczZGF0YSA8LSBzdWJzZXQoZ3J5cGFfY2Fsb3NjX3JybW0sZ3J5cGFfY2Fsb3NjX3JybW0kZXR5a2lldGFfc2V6b251ICVpbiUgYygiMjAxNi8yMDE3IiwiMjAxNy8yMDE4IiwiMjAxOC8yMDE5IiwgIjIwMTkvMjAyMCIsICIyMDIwLzIwMjEiKSAmIGdyeXBhX2NhbG9zY19ycm1tJHN6Y3plcD09InNlem9ub3dhIilbLGMoMzo3KV0NCnd5azMgPC0gcGxvdF9seShkYXRhID0gc3Vic2V0KHczZGF0YSwgdzNkYXRhJGV0eWtpZXRhX3Nlem9udSAhPSAiMjAyMC8yMDIxIiksICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHggPSB+bnJfbWllc2lhY2Ffc2V6b24sDQogICAgICAgICAgICAgICAgeSA9IH5zdW1hX3ByenlwYWRrb3csDQogICAgICAgICAgICAgICAgY29sb3IgPSB+ZXR5a2lldGFfc2V6b251LA0KICAgICAgICAgICAgICAgIHRleHQgPSB+bXNjX25hendhLCANCiAgICAgICAgICAgICAgICBob292ZXJpbmZvID0gJ3RleHQnDQogICAgICAgICAgICAgICAgKQ0Kd3lrMyA8LSB3eWszICU+JSAgYWRkX2xpbmVzKGxpbmUgPSBsaXN0KHNoYXBlID0gInNwbGluZSIpKQ0Kd3lrMyA8LSB3eWszICU+JSBsYXlvdXQodGl0bGUgPSAixZpyw7Nkcm9jem55IHByemViaWVnIHphY2hvcm93YcWEIG5hIGdyeXDEmSB3IGxhdGFjaCAyMDE2LTIwMjEiLA0KICAgICAgICAgICAgICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1lciBtaWVzacSFY2EgdyBzZXpvbmllIiksIHlheGlzID0gbGlzdCh0aXRsZSA9ICJJbG/Fm8SHIHphY2hvcm93YcWEIikNCiAgICAgICAgICAgICAgICAgICAgICApDQp3eWszIDwtIHd5azMgJT4lIGFkZF90cmFjZShkYXRhID0gc3Vic2V0KHczZGF0YSwgdzNkYXRhJGV0eWtpZXRhX3Nlem9udSA9PSAiMjAyMC8yMDIxIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gfnN1bWFfcHJ6eXBhZGtvdyAsIG5hbWUgPSAnMjAyMC8yMDIxJywgdHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdsaW5lcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZWQnLCB3aWR0aCA9IDQsIHNoYXBlID0gInNwbGluZSIpKQ0KICAgIA0Kd3lrMw0KYGBgDQoNCldpZGHEhyB3eXJhxbpuaWUsIMW8ZSBwcnplYmllZyBzZXpvbnUgZ3J5cG93ZWdvIDIwMjAvMjAyMSBqZXN0IG9kbWllbm55IG9kIHpuYW5lZ28geiBvc3RhdG5pY2ggNSBsYXQuIFN6Y3p5dCB6YWNob3Jvd2HFhCBuYXN0xIVwacWCIHcgcGllcndzemVqIGZhbGkgc2V6b251LCB0ai4gdyBwYcW6ZHppZXJuaWt1LiBEcnVnYSBmYWxhLCBrdMOzcmEgeiByZWd1xYJ5IG1pYcWCYSBtaWFqZXNjZSB3IG1pZXNpxIVjYWNoIGdydWR6aWXFhCAtIGx1dHkgaSBiecWCYSB3acSZa3N6YSBvZCBwaWVyd3N6ZWosIHcgYmllxbzEhWN5bSBzZXpvbmllIHd5a2F6YcWCYSBzacSZIHpkZWN5ZG93YW5pZSBtbmllanN6xIUgZHluYW1pa8SFLg0KDQpXIG5hc3TEmXBueW0ga3Jva3Ugc3ByYXdkemlteSwgamFrIHd5Z2zEhWRhxYJieSBwcnplYmllZyBzZXpvbnUgZ3J5cG93ZWdvIDIwMjAvMjAyMSwgZ2R5YnkgcG/FgsSFY3p5xIcgemUgc29ixIUgZGFuZSBvIGdyeXBpZSBzZXpvbm93ZWogaSB3eWtyeXR5Y2ggcHJ6eXBhZGthY2gga29yb25hd2lydXNhLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyMjIEJ1ZG93YSB6ZXN0YXd1IGRhbnljaCBvIHByenlwYWRrYWNoIGNvdmlkYSBkbGEgc2V6b251IDIwMjAvMjAyMSANCnJlcXVpcmUocGRmdG9vbHMpDQpyZXF1aXJlKHN0cmluZ3IpDQpyZXF1aXJlKGx1YnJpZGF0ZSkNCnJlcXVpcmUoZHBseXIpDQpyZXF1aXJlKHBsb3RseSkNCmdyeXBhMjAgPC0gZGF0YS5mcmFtZSgpDQpmb3IgKGkgaW4gMTpsZW5ndGgobGlzdGFfcGxpa293KSl7DQp0ZXh0X3JlcF90ZW1wMjAgPC0gcGRmX3RleHQocGRmID0gcGFzdGUwKCJwZGYyLyIsbGlzdGFfcGxpa293W2ldKSkNCnRleHRfcmVwX3RlbXAyMCA8LSBjKHVubGlzdChzdHJzcGxpdCh0ZXh0X3JlcF90ZW1wMjAsICJcclxuIikpKQ0Kd2FudGVkX2xpbmVzMjAgPC0gYygNCiAgICAgICAgICAgICAgICAgIGdyZXAoIlpha2HFvGVuaWEgU0FSUy1Db1YtMiIsdGV4dF9yZXBfdGVtcDIwKVsxXQ0KICAgICAgICAgICAgICAgICAgKQ0Kd2FudGVkX2xpbmVzMjANCndhbnRlZDIwX2RhdGFfcmFwb3J0dSA8LSBwZGZfaW5mbyhwZGYgPSBwYXN0ZTAoInBkZjIvIixsaXN0YV9wbGlrb3dbaV0pKSRrZXlzJFRpdGxlDQp3YW50ZWQyMCA8LSB0ZXh0X3JlcF90ZW1wMjBbZ2V0KCJ3YW50ZWRfbGluZXMyMCIpXQ0KaWYgKHdhbnRlZDIwX2RhdGFfcmFwb3J0dSA9PSAiIV9NWjU2X3JhcCEueGxzeCIpIHt3YW50ZWQyMF9kYXRhX3JhcG9ydHUgPSAiQ2hvcm9ieSB6YWthxbpuZSAxLjAxLTMxLjEyLjIwMjAifSAjbmFwcmF3YSBkYXR5IG9zdGF0bmllZ28gcmFwb3J0dSBkbGEgMjAyMA0KZGF0YV9yYXBvcnR1MjAgPC0gc3RyX2V4dHJhY3Qod2FudGVkMjBfZGF0YV9yYXBvcnR1LCAiXFxkezJ9LlxcZHsyfVxcc1xcZHs0fXxcXGR7Mn0uXFxkezJ9LlxcZHs0fSIpDQpkYXRhX3JhcG9ydHUyMCA8LSBsdWJyaWRhdGU6OmRteShkYXRhX3JhcG9ydHUyMCkNCmlsb3NjX3ByenlwMjAgPC0gYXMubnVtZXJpYyhnc3ViKCJcXHMiLCIiLChzdHJfZXh0cmFjdCh3YW50ZWQyMFsxXSwgIihcXHNcXGQrKXsxLDN9IikpKSkNCndpZXJzejIwIDwtIGRhdGEuZnJhbWUoZGF0YV9yYXBvcnR1MjAsIGlsb3NjX3ByenlwMjApIA0KZ3J5cGEyMCA8LSByYmluZChncnlwYTIwLCB3aWVyc3oyMCkNCn0NCmdyeXBhMjAgPC0gZ3J5cGEyMFtjb21wbGV0ZS5jYXNlcyhncnlwYTIwKSxdDQpncnlwYTIwJGRhdGFfcmFwb3J0dTIwIDwtIGx1YnJpZGF0ZTo6eW1kKGdyeXBhMjAkZGF0YV9yYXBvcnR1MjApDQoNCiMgb2JsaWN6ZW5pZSBpbG/Fm2NpIG5vd3ljaCBwcnp5cGFka8OzdyAoY292aWRhLCBkYW5lIG9kIGxpcGNhIDIwMjApDQpub3dlX3ByeXBfMjAgPC0gZGlmZihncnlwYTIwJGlsb3NjX3ByenlwMjApIA0Kbm93ZV9wcnlwXzIwIDwtIGMoZ3J5cGEyMFsxLDJdLG5vd2VfcHJ5cF8yMCkNCmdyeXBhMjAgPC0gY2JpbmQoZ3J5cGEyMCwgbm93ZV9wcnlwXzIwKQ0KZ3J5cGEyMCA8LSBzdWJzZXQoZ3J5cGEyMCwgZ3J5cGEyMCRkYXRhX3JhcG9ydHUyMCA+ICIyMDIwLTA2LTMwIikNCmdyeXBhMjBbZ3J5cGEyMCRub3dlX3ByeXBfMjAgPDAsM10gPC0gZ3J5cGEyMFtncnlwYTIwJG5vd2VfcHJ5cF8yMCA8MCwyXQ0KZ3J5cGEyMCRtc2MgPC0gbW9udGgoZ3J5cGEyMCRkYXRhX3JhcG9ydHUyMCkNCmdyeXBhMjAkcm9rIDwtIHllYXIoZ3J5cGEyMCRkYXRhX3JhcG9ydHUyMCkNCmdyeXBhMjAkbnJfbWllc2lhY2Ffc2V6b24gPC0gaWZlbHNlKGdyeXBhMjAkbXNjPD02LCBncnlwYTIwJG1zYys2LCBncnlwYTIwJG1zYy02KQ0KZ3J5cGEyMCA8LSBncnlwYTIwICU+JSBtdXRhdGUoZXR5a2lldGFfc2V6b251ID0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKG5yX21pZXNpYWNhX3Nlem9uIDw9IDYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAocm9rLCAiLyIscm9rKzEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAocm9rLTEsICIvIixyb2spDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQpncnlwYTIwJG1zY19uYXp3YSA8LSBtb250aChncnlwYTIwJG1zYywgbGFiZWwgPSBUUlVFKQ0KZ3J5cGEyMCA8LSBncnlwYTIwICU+JSBncm91cF9ieShyb2ssIG1zYywgbnJfbWllc2lhY2Ffc2V6b24sIGV0eWtpZXRhX3Nlem9udSwgbXNjX25hendhKSAlPiUgc3VtbWFyaXNlKHN1bWFfcHJ6eXBhZGtvdyA9IHN1bShub3dlX3ByeXBfMjApKQ0KDQojIGdyeXBhMjAkc3VtX3Byenlfbm9ybSA8LSBub3JtYWxpemFjamEoZ3J5cGEyMCRzdW1hX3ByenlwYWRrb3cpDQpncnlwYTIwJHN6Y3plcCA8LSAiY292aWQiDQpncnlwYTIwIDwtIGdyeXBhMjBbLGMoMSwyLDYsMyw0LDUsNyldDQpncnlwYV9jYWxvc2NfcnJtbSA8LSByYmluZChncnlwYV9jYWxvc2NfcnJtbSwgZ3J5cGEyMCkNCiMgVmlldyhncnlwYV9jYWxvc2NfcnJtbSkNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD04LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdzRkYXRhIDwtIHN1YnNldChncnlwYV9jYWxvc2NfcnJtbSxncnlwYV9jYWxvc2NfcnJtbSRldHlraWV0YV9zZXpvbnUgJWluJSBjKCIyMDE2LzIwMTciLCIyMDE3LzIwMTgiLCIyMDE4LzIwMTkiLCAiMjAxOS8yMDIwIiwgIjIwMjAvMjAyMSIpKVssYygzOjcpXQ0KdzRkYXRhIDwtIHc0ZGF0YSAlPiUgZ3JvdXBfYnkobnJfbWllc2lhY2Ffc2V6b24sZXR5a2lldGFfc2V6b251LCBtc2NfbmF6d2EpICU+JSBzdW1tYXJpc2Uoc3VtYV9wcnp5cGFka293ID0gc3VtKHN1bWFfcHJ6eXBhZGtvdykpDQp3NGRhdGEgPC0gdzRkYXRhWyxjKDQsMSwyLDMpXQ0KdzRkYXRhIDwtIGFzLmRhdGEuZnJhbWUodzRkYXRhKQ0Kd3lrNCA8LSBwbG90X2x5KGRhdGEgPSBzdWJzZXQodzRkYXRhLCB3NGRhdGEkZXR5a2lldGFfc2V6b251ICE9ICIyMDIwLzIwMjEiKSwgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHggPSB+bnJfbWllc2lhY2Ffc2V6b24sDQogICAgICAgICAgICAgICAgeSA9IH5zdW1hX3ByenlwYWRrb3csDQogICAgICAgICAgICAgICAgY29sb3IgPSB+ZXR5a2lldGFfc2V6b251LA0KICAgICAgICAgICAgICAgIHRleHQgPSB+bXNjX25hendhLCANCiAgICAgICAgICAgICAgICBob292ZXJpbmZvID0gJ3RleHQnDQogICAgICAgICAgICAgICAgKQ0Kd3lrNCA8LSB3eWs0ICU+JSAgYWRkX2xpbmVzKGxpbmUgPSBsaXN0KHNoYXBlID0gInNwbGluZSIpKQ0Kd3lrNCA8LSB3eWs0ICU+JSBsYXlvdXQodGl0bGUgPSAixZpyw7Nkcm9jem55IHByemViaWVnIHphY2hvcm93YcWEIG5hIGdyeXDEmSBpIGtvcm9uYXdpcnVzYSAoMjAyMC8yMDIxKSB3IGxhdGFjaCAyMDE2LTIwMjEiLA0KICAgICAgICAgICAgICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1lciBtaWVzacSFY2EgdyBzZXpvbmllIiksIHlheGlzID0gbGlzdCh0aXRsZSA9ICJJbG/Fm8SHIHphY2hvcm93YcWEIikpDQp3eWs0IDwtIHd5azQgJT4lIGFkZF90cmFjZShkYXRhID0gc3Vic2V0KHc0ZGF0YSwgdzRkYXRhJGV0eWtpZXRhX3Nlem9udSA9PSAiMjAyMC8yMDIxIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gfnN1bWFfcHJ6eXBhZGtvdyAsIG5hbWUgPSAnMjAyMC8yMDIxJywgdHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdsaW5lcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZWQnLCB3aWR0aCA9IDQsIHNoYXBlID0gInNwbGluZSIpKQ0KDQp3eWs0DQpgYGANCg0KUG8gcG/FgsSFY3plbml1IGRhbnljaCBvIHphcGFkYWxub8WbY2kgbmEgZ3J5cMSZIHNlem9ub3fEhSBpIG5hIGtvcm9uYXdpcnVzYSB3aWRhxIcgamVzemN6ZSBkb2vFgmFkbmllaiBvZG1pZW5ueSBwcnplYmllZyBzZXpvbnUgZ3J5cG93ZWdvLiBTemN6eXQgxYLEhWN6bnljaCB6YWNob3Jvd2HFhCBuYSBncnlwxJkgaSBrb3JvbmF3aXJ1c2EgcHJ6eXBhZMWCIGNvIHByYXdkYSB3IG1hcmN1IDIwMjEgamVkbmFrIHBpZXJ3c3p5IHN6Y3p5dCB6IGxpc3RvcGFkYSAyMDIwLCBqZXN0IG5pZW1hbCByw7N3bnkgdGVtdSB6IG1hcmNhLiBaYXp3eWN6YWogcGllcndzemEgZmFsYSBncnlweSBiecWCYSBvIHBvxYJvd8SZIG5pxbxzemEgb2QgZHJ1Z2llaiBmYWxpIHcgc2V6b25pZS4NCg0KQ3p5IG9kbWllbm5hIMWbcsOzZHJvY3puYSBzdHJ1a3R1cmEgd3DFgm7EmcWCYSBuYSBjYcWCb2tzenRhxYJ0IHNlem9udT8gT2Rwb3dpZWTFuiBkYWplIHBvbmnFvHN6eSB3eWtyZXMsIG5hIGt0w7NyeW0gd2lkYcSHIGRhbmUgbmFyYXN0YWrEhWNvIHcgb3N0YXRuaWNoIHBpxJljaXUgc2V6b25hY2g6DQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp3NWRhdGEgPC0gdzRkYXRhICU+JSBncm91cF9ieShldHlraWV0YV9zZXpvbnUpICU+JSBtdXRhdGUoY3VtX3N1bWFfcHJ6eXBhZGtvdyA9IGN1bXN1bShzdW1hX3ByenlwYWRrb3cpKQ0Kd3lrNSA8LSBwbG90X2x5KGRhdGEgPSBzdWJzZXQodzVkYXRhLCB3NWRhdGEkZXR5a2lldGFfc2V6b251ICE9ICIyMDIwLzIwMjEiKSwgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIHggPSB+bnJfbWllc2lhY2Ffc2V6b24sDQogICAgICAgICAgICAgICAgeSA9IH5jdW1fc3VtYV9wcnp5cGFka293LA0KICAgICAgICAgICAgICAgIGNvbG9yID0gfmV0eWtpZXRhX3Nlem9udSwNCiAgICAgICAgICAgICAgICB0ZXh0ID0gfm1zY19uYXp3YSwgDQogICAgICAgICAgICAgICAgaG9vdmVyaW5mbyA9ICd0ZXh0Jw0KICAgICAgICAgICAgICAgICkNCnd5azUgPC0gd3lrNSAlPiUgIGFkZF9saW5lcyhsaW5lID0gbGlzdChzaGFwZSA9ICJzcGxpbmUiKSkNCnd5azUgPC0gd3lrNSAlPiUgbGF5b3V0KHRpdGxlID0gIlphY2hvcm93YW5pYSBuYSBncnlwxJkgaSBrb3JvbmF3aXJ1c2EgKG5hcmFzdGFqxIVjbykgdyBsYXRhY2ggMjAxNi0yMDIxIiwNCiAgICAgICAgICAgICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtZXIgbWllc2nEhWNhIHcgc2V6b25pZSIpLCB5YXhpcyA9IGxpc3QodGl0bGUgPSAiSWxvxZvEhyB6YWNob3Jvd2HFhCIpDQogICAgICAgICAgICAgICAgICAgICAgKQ0Kd3lrNSA8LSB3eWs1ICU+JSBhZGRfdHJhY2UoZGF0YSA9IHN1YnNldCh3NWRhdGEsIHc1ZGF0YSRldHlraWV0YV9zZXpvbnUgPT0gIjIwMjAvMjAyMSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IH5jdW1fc3VtYV9wcnp5cGFka293ICwgbmFtZSA9ICcyMDIwLzIwMjEnLCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ2xpbmVzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJ3JlZCcsIHdpZHRoID0gNCwgc2hhcGUgPSAic3BsaW5lIikpDQp3eWs1DQogIA0KYGBgDQoNCkphayB3aWRhxIcgc2V6b24gMjAyMC8yMDIxIG5pZSByw7PFvG5pIHNpxJkgaXN0b3RuaWUgb2Qgb3N0YXRuaWNoIHBpxJljaXUgc2V6b27Ds3cgZ3J5cG93eWNoLiBLcnp5d2EgbmFyYXN0YWrEhWN5Y2ggemFjaG9yb3dhxYQgcm96d2lqYSBzacSZIHcgb2tvbGljYWNoIMWbcmVkbmllaiB6IHd5YnJhbnljaCBzZXpvbsOzdywgcHJ6eSBjenltIG1vxbxuYSB6YXV3YcW8ecSHLCDFvGUgb2JlY255IHNlem9uIGplc3QgbmllY28gxYJhZ29kbmllanN6eSBvZCBwb3ByemVkbmljaCwgdyBzemN6ZWfDs2xub8WbY2kgb2Qgc2V6b251IDIwMTcvMjAxOC4NCg0KRGxhIHV6dXBlxYJuaWVuaWEgb2JyYXp1IHNlem9udSAyMDIwLzIwMjEgbW/FvGEgcHJ6eWrFvGXEhyBzacSZIHByemViaWVnb3dpIGdyeXB5IHNlem9ub3dlaiBpIGtvcm9uYXdpcnVzYSBvc29ibm86DQoNCmBgYHtyIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTgsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnc2ZGF0YSA8LSBzdWJzZXQoZ3J5cGFfY2Fsb3NjX3JybW0sIGdyeXBhX2NhbG9zY19ycm1tJGV0eWtpZXRhX3Nlem9udSA9PSAiMjAyMC8yMDIxIikNCnc2ZGF0YSA8LSB3NmRhdGFbLGMoMyw0LDUsNiw3KV0NCnd5azYgPC0gcGxvdF9seShkYXRhID0gc3Vic2V0KHc2ZGF0YSwgdzZkYXRhJHN6Y3plcD09InNlem9ub3dhIiksICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgeCA9IH5ucl9taWVzaWFjYV9zZXpvbiwNCiAgICAgICAgICAgICAgICB5ID0gfnN1bWFfcHJ6eXBhZGtvdywNCiAgICAgICAgICAgICAgICBjb2xvciA9IH5zemN6ZXAsDQogICAgICAgICAgICAgICAgdGV4dCA9IH5tc2NfbmF6d2EsIA0KICAgICAgICAgICAgICAgIGhvb3ZlcmluZm8gPSAndGV4dCcNCiAgICAgICAgICAgICAgICApDQp3eWs2IDwtIHd5azYgJT4lICBhZGRfbGluZXMobGluZSA9IGxpc3Qoc2hhcGUgPSAic3BsaW5lIikpDQp3eWs2IDwtIHd5azYgJT4lIGxheW91dCh0aXRsZSA9ICLFmnLDs2Ryb2N6bnkgcHJ6ZWJpZWcgZ3J5cHkgc2V6b25vd2VqIGkga29yb25hd2lydXNhIHcgc2V6b25pZSAyMDIwLzIwMjEiLA0KICAgICAgICAgICAgICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1lciBtaWVzacSFY2EgdyBzZXpvbmllIiksIHlheGlzID0gbGlzdCh0aXRsZSA9ICJJbG/Fm8SHIHphY2hvcm93YcWEIikNCiAgICAgICAgICAgICAgICAgICAgICApICANCnd5azYgPC0gd3lrNiAlPiUgYWRkX3RyYWNlKGRhdGEgPSBzdWJzZXQodzZkYXRhLCB3NmRhdGEkc3pjemVwPT0iY292aWQiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB+c3VtYV9wcnp5cGFka293ICwgbmFtZSA9ICJDT1ZJRCAtIDE5IiwgdHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdsaW5lcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9ICdyZWQnLCB3aWR0aCA9IDQsIHNoYXBlID0gInNwbGluZSIpKQ0Kd3lrNg0KYGBgDQoNCkplc3pjemUgbmEgcG9jesSFdGt1IHNlem9udSB3eWRhd2HFgm8gc2nEmSwgxbxlIGdyeXBhIHNlem9ub3dhIGRhbGVqIGLEmWR6aWUgcHJ6ZXdhxbxhxIcsIGEgdWR6aWHFgiBrb3JvbmF3aXJ1c2EgYsSZZHppZSBrc3p0YcWCdG93YcWCIHNpxJkgYmxpc2tvIDE1JSwgamFrIHdza2F6eXdhxYJ5IGJhZGFuaWEgcHJ6eXRvY3pvbmUgdyBwb3ByemVkbmltIG1hdGVyaWFsZS4gSmVkbmFrIGp1xbwgd2Ugd3J6ZcWbbml1IDIwMjAgdWR6aWHFgiBrb3JvbmF3aXJ1c2EgdyB6YWNob3Jvd2FuaWFjaCBncnlwb3BvZG9ibnljaCB3eW5pw7NzxYIgYHIgc2NhbGVzOjpwZXJjZW50KCh3NmRhdGFbdzZkYXRhJG5yX21pZXNpYWNhX3Nlem9uICVpbiUgYygxOjMpICYgdzZkYXRhJHN6Y3plcD09ImNvdmlkIiwxXSAlPiUgc3VtKCkpLyAodzZkYXRhW3c2ZGF0YSRucl9taWVzaWFjYV9zZXpvbiAlaW4lIGMoMTozKSwxXSAlPiUgc3VtKCkpKWAgYSB3IHBhxbpkemllcm5pa3UgYHIgc2NhbGVzOjpwZXJjZW50KCh3NmRhdGFbdzZkYXRhJG5yX21pZXNpYWNhX3Nlem9uICVpbiUgYygxOjQpICYgdzZkYXRhJHN6Y3plcD09ImNvdmlkIiwxXSAlPiUgc3VtKCkpLyAodzZkYXRhW3c2ZGF0YSRucl9taWVzaWFjYV9zZXpvbiAlaW4lIGMoMTo0KSwxXSAlPiUgc3VtKCkpKWAuIENhxYJ5IHNlem9uIDIwMjAvMjAyMSB0byB1ZHppYcWCIGByIHNjYWxlczo6cGVyY2VudCgodzZkYXRhW3c2ZGF0YSRucl9taWVzaWFjYV9zZXpvbiAlaW4lIGMoMTo5KSAmIHc2ZGF0YSRzemN6ZXA9PSJjb3ZpZCIsMV0gJT4lIHN1bSgpKS8gKHc2ZGF0YVt3NmRhdGEkbnJfbWllc2lhY2Ffc2V6b24gJWluJSBjKDE6OSksMV0gJT4lIHN1bSgpKSlgIGtvcm9uYXdpcnVzYSB3IHphY2hvcm93YW5pYWNoIGdyeXBvcG9kb2JueWNoLiBOYXdldCBiaW9yxIVjIHBvZCB1d2FnxJkgamFrb8WbxIcgdGVzdMOzdywgd3lzb2tpIHByb2NlbnQgdGVzdMOzdyBmYcWCc3p5d2llIGRvZGF0bmljaCBvcmF6IGZha3QsIMW8ZSBwb3p5dHl3bnkgd3luaWsgdGVzdHUgbmllIG96bmFjemEgY2hvcm9ieSwgbW/FvG5hIHN0d2llcmR6acSHIG5hIHBvZHN0YXdpZSB0eWNoIGRhbnljaCwgxbxlIHRlbiBzZXpvbiAibmFsZcW8eSIgZG8ga29yb25hd2lydXNhLiANCg0KUG93ecW8c3plIGRhbmUgaSB3eWtyZXN5IHBva2F6dWrEhSAqKm9kbWllbm5vxZvEhyoqIHNlem9udSBncnlwb3dlZ28gMjAyMC8yMDIxIG9kIG9zdGF0bmljaCA1IHNlem9uw7N3LCBnxYLDs3duaWUgemUgd3pnbMSZZHUgbmEgZHdpZSBjZWNoeToNCg0KLSBvZG1pZW5ueSBwcnplYmllZyB6YWNob3Jvd2HFhCB3IGNpxIVndSByb2t1LA0KLSB3eXNva2kgdWR6aWHFgiBrb3JvbmF3aXJ1c2EgdyBvZ8OzbG55Y2ggemFjaG9yb3dhbmlhY2ggZ3J5cG9wb2RvYm55Y2ggW14yXS4NCg0KSmVkbmFrIG9nw7NsbmEgaWxvxZvEhyB6YWNob3Jvd2HFhCwga3TDs3JhIHJvendpamEgc2nEmSB3IGdyYW5pY2FjaCB3eXpuYWN6b255Y2ggcHJ6ZXogxZtyZWRuacSFIHogbGF0IHBvcHJ6ZWRuaWNoICh3eWtyZXMgcHJlemVudHVqxIVjeSBkYW5lIG5hcmFzdGFqxIVjbyksIGthxbxlIGt3ZXN0aW9ub3dhxIcgemFzYWRub8WbxIcgZHppYcWCYcWEIE1aLCB3IHN6Y3plZ8OzbG5vxZtjaSBwb2xpdHlrxJkgRERNLCB6YW1rbmnEmWNpxJkgd3licmFueWNoIHNla3RvcsOzdyBnb3Nwb2RhcmtpIG9yYXogcHJ6ZWRlIHdzenlzdGtpbSByZW9yZ2FuaXphY2rEmSBzxYJ1xbxieSB6ZHJvd2lhIHcgdHJ5YiBlcGlkZW1pY3pueS4NCg0KDQoNClteMV06IFdzenlzdGtpZSBkYW5lIHBvY2hvZHrEhSB6IHJhcG9ydMOzdyAiTWVsZHVua2kgbyB6YWNob3Jvd2FuaWFjaCBuYSBjaG9yb2J5IHpha2HFum5lLCB6YWthxbxlbmlhY2ggaSB6YXRydWNpYWNoIHcgUG9sc2NlIChkd3V0eWdvZG5pb3dlKSIgcHVibGlrb3dhbnljaCBuYSBzdHJvbmFjaCBOSVpQLVBaSCAvIFBJUywgWkFLxYFBRCBFUElERU1JT0xPR0lJIENIT1LDk0IgWkFLQcW5TllDSCBJIE5BRFpPUlUgUHJhY293bmlhIE1vbml0b3Jvd2FuaWEgaSBBbmFsaXp5IFN5dHVhY2ppIEVwaWRlbWlvbG9naWN6bmVqOiBbTklaUC1QWkhdKGh0dHA6Ly93d3dvbGQucHpoLmdvdi5wbC9vbGRwYWdlL2VwaW1lbGQvaW5kZXhfcC5odG1sKQ0KW14yXTogRGxhIHByenlwb21uaWVuaWEsIHcgcG9uacW8c3p5Y2ggYmFkYW5pYWNoIHNwcmF3ZHphbnUgdWR6aWHFgiBwb3N6Y3plZ8OzbG55Y2ggc3pjemVww7N3IHdpcnVzw7N3LCB3IHphY2hvcm93YW5pYWNoIG5hIGdyeXDEmSBpIHByemV6acSZYmllbmlhLiBXbmlvc2VrIHogdHljaCBiYWRhxYQgYnnFgiB0YWtpLCDFvGUgdWR6aWHFgiBrb3JvbmF3aXJ1c2Egd3lub3NpIHphend5Y3phaiBvZCA3IGRvIDE1IHByb2NlbnQuDQoxLiAiVmlydXPigJN2aXJ1cyBpbnRlcmFjdGlvbnMgaW1wYWN0IHRoZSBwb3B1bGF0aW9uIGR5bmFtaWNzIG9mIGluZmx1ZW56YSBhbmQgdGhlIGNvbW1vbiBjb2xkIiwgUE5BUyBEZWNlbWJlciAyNiwgMjAxOSAxMTYgKDUyKSAyNzE0Mi0yNzE1MDsgZmlyc3QgcHVibGlzaGVkIERlY2VtYmVyIDE2LCAyMDE5LCBTZW1hIE5pY2tiYWtoc2gsIENvbGV0dGUgTWFpciwgTG91aXNlIE1hdHRoZXdzLCBSaWNoYXJkIFJlZXZlLCBQYXVsIEMuIEQuIEpvaG5zb24sIEZpb25hIFRob3JidXJuLCBCZWF0cml4IHZvbiBXaXNzbWFubiwgQXJsZW5lIFJleW5vbGRzLCBKYW1lcyBNY01lbmFtaW4sIFJvcnkgTi4gR3Vuc29uLCBhbmQgUGFibG8gUi4gTXVyY2lhIFtQTkFTXShodHRwczovL3d3dy5wbmFzLm9yZy9jb250ZW50LzExNi81Mi8yNzE0MikNCjIuICJFcGlkZW1pb2xvZ3kgb2YgU2Vhc29uYWwgQ29yb25hdmlydXNlczogRXN0YWJsaXNoaW5nIHRoZSBDb250ZXh0IGZvciB0aGUgRW1lcmdlbmNlIG9mIENvcm9uYXZpcnVzIERpc2Vhc2UgMjAxOSIsIFRoZSBKb3VybmFsIG9mIEluZmVjdGlvdXMgRGlzZWFzZXMsIDAxIEp1biAyMDIwLCAyMjIoMSk6MTctMjUsIFtFVVJPUEUgUE1DXShodHRwczovL2V1cm9wZXBtYy5vcmcvYXJ0aWNsZS9QTUMvNzE4NDQwND90ZXN0aW5nKQ0KDQoNCg0K