UK LSE IPO Calendar — London Listings Tracker avatar

UK LSE IPO Calendar — London Listings Tracker

Pricing

from $300.00 / 1,000 ipos

Go to Apify Store
UK LSE IPO Calendar — London Listings Tracker

UK LSE IPO Calendar — London Listings Tracker

Track upcoming and recent London Stock Exchange IPOs — Main Market, AIM and HGSM listings with offer prices, sponsor/nomad, sector, raise amount and admission date. Built for UK institutional investors, AIM-focused funds and journalists.

Pricing

from $300.00 / 1,000 ipos

Rating

0.0

(0)

Developer

NexGenData

NexGenData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

IyBVSyBMU0UgSVBPIENhbGVuZGFyIOKAlCBMb25kb24gTGlzdGluZ3MgVHJhY2tlcgoKKipUcmFjayB1cGNvbWluZyBhbmQgcmVjZW50IExvbmRvbiBTdG9jayBFeGNoYW5nZSBJUE9zIOKAlCBNYWluIE1hcmtldCwgQUlNIGFuZCBIR1NNIGxpc3RpbmdzIHdpdGggb2ZmZXIgcHJpY2VzLCBzcG9uc29yL25vbWFkLCBzZWN0b3IsIHJhaXNlIGFtb3VudCBhbmQgYWRtaXNzaW9uIGRhdGUuKioKCiMjIFdobyBpcyB0aGlzIGZvcj8KCklmIHlvdSBmaXQgb25lIG9mIHRoZXNlLCB0aGlzIGFjdG9yIHdhcyBidWlsdCBmb3IgeW91OgoKLSAqKlVLIGluc3RpdHV0aW9uYWwgaW52ZXN0b3JzIGFuZCBwZW5zaW9uIGFsbG9jYXRvcnMqKiB0cnlpbmcgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYmFjayB0aGUgbmV4dCBXaXNlLCBSYXNwYmVycnkgUGkgb3IgTWFnbnVtIEljZSBDcmVhbSBDb21wYW55IGJlZm9yZSB0aGUgb3JkZXIgYm9vayBjbG9zZXMuIE1vc3QgTFNFIElQT3Mgc3BlbmQgNS0xMCBidXNpbmVzcyBkYXlzIGluIHRoZSBpbnN0aXR1dGlvbmFsIGJvb2stYnVpbGQg4oCUIGJ5IHRoZSB0aW1lICpCbG9vbWJlcmcqLCAqUmV1dGVycyosICpTa3kgTmV3cyogb3IgKlRoZSBGaW5hbmNpYWwgVGltZXMqIGFyZSBydW5uaW5nIHRoZSBsZWFndWUtdGFibGUgZmVhdHVyZSwgdGhlIGluc3RpdHV0aW9uYWwgdHJhbmNoZSBpcyBhbHJlYWR5IGNsb3NpbmcgYW5kIHRoZSByZXRhaWwgaW50ZXJtZWRpYXJ5IG9mZmVyIChIYXJncmVhdmVzIExhbnNkb3duLCBBSiBCZWxsLCBpbnRlcmFjdGl2ZSBpbnZlc3RvciwgUHJpbWFyeUJpZCkgaXMgb3BlbiBmb3Igb25seSAyNC03MiBob3Vycy4KLSAqKkFJTS1mb2N1c2VkIGZ1bmRzIGFuZCBzbWFsbC1jYXAgbWFuYWdlcnMqKiDigJQgT2N0b3B1cyBBSU0gVkNULCBVbmljb3JuIEFJTSBWQ1QsIEFtYXRpIEFJTSBWQ1QsIEhhcmdyZWF2ZSBIYWxlIEFJTSBWQ1QsIFByb1ZlbiBBSU0gVkNULCBNb2JldXMgQUlNIFZDVCDigJQgd2hvIG5lZWQgdG8gdHJhY2sgZXZlcnkgbmV3IEFJTSBhZG1pc3Npb24sIHRoZSBub21hZCBvbiBpdCwgdGhlIHBsYWNpbmcgcHJpY2UgYW5kIHRoZSBpbnN0aXR1dGlvbmFsIGJvb2sgdG8gc2l6ZSB0aGVpciBhbGxvY2F0aW9ucyBhbmQgc3RhZ2dlciB0aGVpciBWQ1QgY2FzaCBkZXBsb3ltZW50LgotICoqSVBPIHRyYWRlcnMgYW5kIGdyZXktbWFya2V0IG1ha2VycyoqIHJ1bm5pbmcgTG9uZG9uIG5ldy1pc3N1ZSBib29rcyBhdCBQZWVsIEh1bnQsIERldXRzY2hlIE51bWlzLCBQYW5tdXJlIExpYmVydW0sIEJlcmVuYmVyZywgSW52ZXN0ZWMsIENhdmVuZGlzaCwgU2hvcmUgQ2FwaXRhbCwgQ2Vua29zIC8gRmlubkNhcCwgd2hvIG5lZWQgYSBzaW5nbGUgZmVlZCBvZiBldmVyeSBhY3RpdmUgYm9vay1idWlsZCB3aXRoIG9mZmVyIHByaWNlIHJhbmdlLCByYWlzZSwgc2VjdG9yIGFuZCBub21hZC4KLSAqKkhlZGdlIGZ1bmRzIHJ1bm5pbmcgVUsgbG9uZy9zaG9ydCBib29rcyoqIHdobyBuZWVkIHRvIGtub3cgd2hlbiBPY3RvcHVzIEVuZXJneSwgVmlzbWEsIFNoZWluIG9yIE1hZ251bSBJY2UgQ3JlYW0gYXJlIHByaWNpbmcgc28gdGhleSBjYW4gcG9zaXRpb24gcmVsYXRlZCBsaXN0ZWQgbmFtZXMgKGVuZXJneSBtYWpvcnMsIE5vcmRpYyBTYWFTIGNvbXBzLCBmYXN0LWZhc2hpb24gaW5jdW1iZW50cywgVW5pbGV2ZXIgLyBOZXN0bMOpIC8gTW9uZGVsZXopIGFoZWFkIG9mIHRoZSBmbG9hdC4KLSAqKlNlY3RvciBhbmFseXN0cyoqIGJ1aWxkaW5nICJBSU0gYmlvdGVjaCBjbGFzcyBvZiAyMDI2IiBvciAiTG9uZG9uIGxpc3RpbmdzIHJlZm9ybSBjb2hvcnQiIGNvaG9ydCBzdHVkaWVzIOKAlCBldmVyeSBsaXN0aW5nIHRhZ2dlZCB3aXRoIG1hcmtldCB0aWVyLCBsaXN0aW5nIGNhdGVnb3J5LCBzcG9uc29yIC8gbm9tYWQsIGFuY2hvciBib29rIGFuZCBwb3N0LWxpc3RpbmcgcmV0dXJuLgotICoqRmluYW5jaWFsIGpvdXJuYWxpc3RzLCBlcXVpdHktcmVzZWFyY2ggZGVza3MgYW5kIGxlYWd1ZS10YWJsZSBjb21waWxlcnMqKiB3cml0aW5nIHRoZSBkZWFsIHNoZWV0LCB0aGUgbm9tYWQgcmFua2luZ3MgKENhdmVuZGlzaCB2cyBQZWVsIEh1bnQgdnMgU2hvcmUgQ2FwaXRhbCB2cyBXSCBJcmVsYW5kKSBvciB0aGUgc3BvbnNvciBzY29yZWJvYXJkIChHb2xkbWFuIHZzIEpQIE1vcmdhbiB2cyBNb3JnYW4gU3RhbmxleSB2cyBDaXRpIHZzIEJhcmNsYXlzIHZzIEhTQkMgb24gdGhlIE1haW4gTWFya2V0KS4KCklmIHlvdSd2ZSBldmVyIHBhaWQgQmxvb21iZXJnIExPTiBJUE8sIFJlZmluaXRpdiBMU0VHIFdvcmtzcGFjZSwgRGVhbG9naWMgRUNNIEFuYWx5dGljcyBvciBNZXJnZXJtYXJrZXQgVUsgRUNNIFVTRCAyLDAwMC0yLDUwMC9zZWF0L21vbnRoIGZvciB0aGlzIGRhdGEsIHlvdSdyZSB0aGUgdGFyZ2V0IGJ1eWVyLiBUaGlzIGFjdG9yIGV4cG9zZXMgdGhlIHNhbWUgZmllbGRzIOKAlCBJUE8gbGlmZWN5Y2xlLCBvZmZlciBwcmljZSwgc3BvbnNvciAvIG5vbWFkLCBhbmNob3IgaW52ZXN0b3IgYm9vaywgZmlyc3QtZGF5IHBvcCwgY3VycmVudCByZXR1cm4g4oCUIHZpYSBjbGVhbiBKU09OLCBiaWxsZWQgcGVyIElQTyByb3cuCgojIyBXaGF0J3MgaW4gdGhlIGJveAoKRXZlcnkgTG9uZG9uIFN0b2NrIEV4Y2hhbmdlIChMU0UpIE1haW4gTWFya2V0LCBBSU0gYW5kIEhHU00gbmV3IGxpc3RpbmcgZnJvbSBwcm9zcGVjdHVzIGZpbGluZyB0aHJvdWdoIHByaWNpbmcsIGFkbWlzc2lvbiBkYXksIHBvc3QtSVBPIHRyYWRpbmcgYW5kICh3aGVyZSBhcHBsaWNhYmxlKSB3aXRoZHJhd2FsLiBFYWNoIHJvdyBpbmNsdWRlcyB0aGUgaXNzdWVyJ3MgbGVnYWwgbmFtZSwgTFNFIHRpY2tlciAoZS5nLiBgUlBJLkxgLCBgV0lTRS5MYCwgYFJPTy5MYCwgYENPQkEuTGApLCBjdXJyZW50IGxpZmVjeWNsZSBzdGFnZSAoUHJvb2YgLyBBcHByb3ZlZCAvIExpc3RlZCAvIFdpdGhkcmF3biAvIFBvc3Rwb25lZCksIG1hcmtldCB0aWVyIChNYWluIE1hcmtldCAvIEFJTSAvIEhHU00pLCBsaXN0aW5nIGNhdGVnb3J5IChQcmVtaXVtIC8gU3RhbmRhcmQgLyBEaXJlY3QgTGlzdGluZyAvIE4vQSBmb3IgQUlNKSwgSUNCL0dJQ1Mtc3R5bGUgc2VjdG9yLCBwbGFpbi1FbmdsaXNoIGJ1c2luZXNzIGRlc2NyaXB0aW9uLCBmaWxpbmcgLyBwcmljZWQgLyBhZG1pc3Npb24gZGF0ZXMsIG9mZmVyIHByaWNlIGluIHBlbmNlLCBpbmRpY2F0aXZlIHByaWNlIHJhbmdlLCBzaGFyZXMgb2ZmZXJlZCwgZ3Jvc3MgcmFpc2UsIG1hcmtldCBjYXAgYXQgYWRtaXNzaW9uLCBzcG9uc29yIChmb3IgTWFpbiBNYXJrZXQg4oCUIEdvbGRtYW4gU2FjaHMsIEpQIE1vcmdhbiwgTW9yZ2FuIFN0YW5sZXksIENpdGksIEJhcmNsYXlzLCBIU0JDLCBCTlAgUGFyaWJhcywgZXRjLikgb3Igbm9tYWQgKGZvciBBSU0g4oCUIENhdmVuZGlzaCwgUGFubXVyZSBMaWJlcnVtLCBQZWVsIEh1bnQsIERldXRzY2hlIE51bWlzLCBCZXJlbmJlcmcsIEludmVzdGVjLCBBbGxlbmJ5IENhcGl0YWwsIFN0cmFuZCBIYW5zb24sIFdIIElyZWxhbmQsIGV0Yy4pLCBqb2ludCBnbG9iYWwgY29vcmRpbmF0b3Igc3luZGljYXRlLCBhbmNob3IgLyBjb3JuZXJzdG9uZSBpbnZlc3RvciBsaXN0LCBwcm9zcGVjdHVzIFVSTCBvbiB0aGUgRkNBIE5hdGlvbmFsIFN0b3JhZ2UgTWVjaGFuaXNtIG9yIExTRSBJc3N1ZXIgU2VydmljZXMsIGZpcnN0LWRheSBwb3AsIGN1cnJlbnQgcHJpY2UsIGN1cnJlbnQgbWFya2V0IGNhcCwgYW5kIHRvdGFsIHJldHVybiBmcm9tIElQTy4KCiMjIFBsYWluLUVuZ2xpc2ggVUsgSVBPIG1lY2hhbmljcwoKQSBmZXcgVUstc3BlY2lmaWMgdGVybXMgZGVjb2RlZCBmb3Igbm9uLVVLIHBlb3BsZToKCi0gKipNYWluIE1hcmtldCB2cyBBSU0gdnMgSEdTTSoqIOKAlCBUaGUgTFNFIGhhcyB0aHJlZSBwcmltYXJ5IGVxdWl0eSB0aWVycy4gKipNYWluIE1hcmtldCoqIGlzIHRoZSBzZW5pb3IgYm9hcmQ6IEZDQS1yZWd1bGF0ZWQsIEZUU0UtZWxpZ2libGUgKGlmIHlvdSBsaXN0IGEgc3VmZmljaWVudCBmcmVlIGZsb2F0KSwgZWxpZ2libGUgZm9yIG1ham9yLWluZGV4IGluY2x1c2lvbiAoRlRTRSAxMDAgLyAyNTAgLyAzNTAgLyBBbGwtU2hhcmUpLiAqKkFJTSoqIChBbHRlcm5hdGl2ZSBJbnZlc3RtZW50IE1hcmtldCkgaXMgTFNFJ3MgZ3Jvd3RoIGJvYXJkOiBub21hZC1yZWd1bGF0ZWQgKExTRSBkZWxlZ2F0ZXMgcmVndWxhdG9yeSBvdmVyc2lnaHQgdG8gYSBOb21pbmF0ZWQgQWR2aXNlciwgdGhlICJub21hZCIpLCBubyBtaW5pbXVtIGZyZWUgZmxvYXQsIG5vIG1pbmltdW0gdHJhZGluZyByZWNvcmQgcmVxdWlyZWQgZm9yIGFkbWlzc2lvbiwgbG93ZXIgY29tcGxpYW5jZSBjb3N0cywgfjYwMCBhY3RpdmUgaXNzdWVycy4gKipIR1NNKiogKEhpZ2ggR3Jvd3RoIFNlZ21lbnQgTWFya2V0KSB3YXMgcmVmb3JtZWQgaW4gMjAyNCB1bmRlciB0aGUgRkNBJ3MgVUsgbGlzdGluZ3Mgb3ZlcmhhdWwg4oCUIGRlc2lnbmVkIHRvIGNvbXBldGUgd2l0aCBOYXNkYXEgZm9yIFVLIHRlY2ggSVBPcyAoV2lzZSwgRGVsaXZlcm9vLCBUSEcgY2xhc3MgY2FuZGlkYXRlcyksIGR1YWwtY2xhc3Mgc2hhcmUgc3RydWN0dXJlcyBwZXJtaXR0ZWQsIGxpZ2h0ZXIgZnJlZS1mbG9hdCByZXF1aXJlbWVudHMuCi0gKipQcmVtaXVtIHZzIFN0YW5kYXJkIGxpc3RpbmcqKiDigJQgT24gdGhlIE1haW4gTWFya2V0LCBsaXN0aW5ncyBhcmUgY2F0ZWdvcmlzZWQgYXMgKipQcmVtaXVtKiogb3IgKipTdGFuZGFyZCoqLiBQcmVtaXVtIGlzIHRoZSBGQ0EncyAic3VwZXItZXF1aXZhbGVudCIgVUtMQSByZWdpbWUg4oCUIGhpZ2hlciBjb250aW51aW5nLW9ibGlnYXRpb24gc3RhbmRhcmRzIChVSyBDb3Jwb3JhdGUgR292ZXJuYW5jZSBDb2RlICJjb21wbHktb3ItZXhwbGFpbiIsIHJlbGF0ZWQtcGFydHktdHJhbnNhY3Rpb24gYXBwcm92YWwgcnVsZXMsIHNwb25zb3Itc3VwZXJ2aXNlZCBzaWduaWZpY2FudCB0cmFuc2FjdGlvbnMpLCBhbmQgaXQncyBhIHByZWNvbmRpdGlvbiBmb3IgRlRTRSBVSyBJbmRleCBTZXJpZXMgaW5jbHVzaW9uLiBTdGFuZGFyZCBpcyB0aGUgbWluaW11bS1FVS1Qcm9zcGVjdHVzLURpcmVjdGl2ZSByZWdpbWUg4oCUIGxpZ2h0ZXIgY29udGludWluZyBvYmxpZ2F0aW9ucywgbm8gRlRTRSBlbGlnaWJpbGl0eS4gTW9zdCBpbnN0aXR1dGlvbmFsIFVLIGZ1bmRzIHdpbGwgb25seSBidXkgUHJlbWl1bS4gVEhHLCBEZWxpdmVyb28sIFdpc2UgbGlzdGVkIFN0YW5kYXJkIOKAlCBhbmQgdGhlIEZDQSdzIDIwMjQgbGlzdGluZ3MgcmVmb3JtIGlzIGxhcmdlbHkgYSByZXNwb25zZSB0byB0aGF0LgotICoqU3BvbnNvcioqIOKAlCBPbiB0aGUgTWFpbiBNYXJrZXQsIGV2ZXJ5IFByZW1pdW0gbGlzdGluZyBtdXN0IGFwcG9pbnQgYW4gKipGQ0EtYXBwcm92ZWQgc3BvbnNvcioqICh0eXBpY2FsbHkgR29sZG1hbiBTYWNocywgSlAgTW9yZ2FuLCBNb3JnYW4gU3RhbmxleSwgQ2l0aSwgQmFyY2xheXMsIEhTQkMsIEJOUCBQYXJpYmFzLCBEZXV0c2NoZSBOdW1pcywgUGVlbCBIdW50LCBCZXJlbmJlcmcsIEplZmZlcmllcykuIFRoZSBzcG9uc29yIGlzIGxlZ2FsbHkgcmVzcG9uc2libGUgdG8gdGhlIEZDQSBmb3IgdGhlIGxpc3RpbmcncyBjb21wbGlhbmNlIOKAlCBlcXVpdmFsZW50IHRvIHRoZSBhdWRpdG9yIG9mIGNhcGl0YWwgbWFya2V0cy4gU3RhbmRhcmQgbGlzdGluZ3MgZG9uJ3QgcmVxdWlyZSBhIHNwb25zb3IuCi0gKipOb21hZCoqIOKAlCBPbiBBSU0sIGV2ZXJ5IGlzc3VlciBtdXN0IHJldGFpbiBhICoqTm9taW5hdGVkIEFkdmlzZXIgKG5vbWFkKSoqIGF0IGFsbCB0aW1lcy4gVGhlIG5vbWFkIGlzIGxlZ2FsbHkgcmVzcG9uc2libGUgdG8gdGhlIExTRSBmb3IgdGhlIGNvbXBhbnkncyBjb21wbGlhbmNlIHdpdGggQUlNIFJ1bGVzLiBJZiB5b3UgbG9zZSB5b3VyIG5vbWFkLCB5b3UncmUgc3VzcGVuZGVkIHdpdGhpbiAzMCBkYXlzLiBUaGUgbm9tYWQgZG9lcyB0aGUgd29yayB0aGF0IHRoZSBzcG9uc29yIGRvZXMgb24gdGhlIE1haW4gTWFya2V0IOKAlCBidXQgZm9yIHRoZSBlbnRpcmUgbGlmZSBvZiB0aGUgQUlNIGxpc3RpbmcsIG5vdCBqdXN0IGF0IGFkbWlzc2lvbi4gVGhlIFVLIEFJTSBub21hZCB1bml2ZXJzZSBpcyBjb25jZW50cmF0ZWQ6IENhdmVuZGlzaCBDYXBpdGFsIE1hcmtldHMsIFBlZWwgSHVudCwgUGFubXVyZSBMaWJlcnVtLCBEZXV0c2NoZSBOdW1pcywgQmVyZW5iZXJnLCBJbnZlc3RlYywgQWxsZW5ieSBDYXBpdGFsLCBDZW5rb3MgLyBGaW5uQ2FwIChub3cgU1AgQW5nZWwgLyBGaW5uQ2FwIENhdmVuZGlzaCBtZXJnZSksIFN0cmFuZCBIYW5zb24sIFdIIElyZWxhbmQsIFNob3JlIENhcGl0YWwsIFNQQVJLIEFkdmlzb3J5IFBhcnRuZXJzIGFyZSB0aGUgaGlnaC12b2x1bWUgbm9tYWRzLgotICoqSW50ZW50aW9uIHRvIEZsb2F0IChJVEYpKiog4oCUIHRoZSBmb3JtYWwgZmlyc3QgcHVibGljIHNpZ25hbCB0aGF0IGEgY29tcGFueSBwbGFucyB0byBJUE8gb24gdGhlIExTRS4gQ29tcGFuaWVzIHR5cGljYWxseSBpc3N1ZSBhbiBJVEYgMi00IHdlZWtzIGJlZm9yZSBwcmljaW5nOyB0aGUgcHJvc3BlY3R1cyAvIGFkbWlzc2lvbiBkb2N1bWVudCBmb2xsb3dzLiBJVEYgYW5ub3VuY2VtZW50cyBhcmUgUk5TLXB1Ymxpc2hlZCBhbmQgdGhlIEZUIE1hcmtldHMgTGl2ZSBibG9nIGNvdmVycyB0aGVtIGluIHJlYWwgdGltZS4KLSAqKlByb3NwZWN0dXMgdnMgQWRtaXNzaW9uIERvY3VtZW50Kiog4oCUIE1haW4gTWFya2V0IGxpc3RpbmdzIGZpbGUgYW4gKipGQ0EtYXBwcm92ZWQgcHJvc3BlY3R1cyoqIChsb2RnZWQgb24gdGhlIEZDQSdzIE5hdGlvbmFsIFN0b3JhZ2UgTWVjaGFuaXNtKS4gQUlNIGxpc3RpbmdzIGZpbGUgYSBsaWdodGVyICoqQUlNIGFkbWlzc2lvbiBkb2N1bWVudCoqIChsb2RnZWQgb24gdGhlIExTRSBJc3N1ZXIgU2VydmljZXMgcG9ydGFsKS4gVGhlIHR3byBhcmUgZnVuY3Rpb25hbGx5IHNpbWlsYXIgYnV0IHRoZSBwcm9zcGVjdHVzIGlzIEZDQS12ZXR0ZWQ7IHRoZSBhZG1pc3Npb24gZG9jdW1lbnQgaXMgbm9tYWQtdmV0dGVkLgotICoqQW5jaG9yIGludmVzdG9yIC8gY29ybmVyc3RvbmUqKiDigJQgSW4gVUsgSVBPcywgYW5jaG9yIGludmVzdG9ycyAodHlwaWNhbGx5IFNjaHJvZGVycywgYWJyZG4sIEF2aXZhIEludmVzdG9ycywgTGVnYWwgJiBHZW5lcmFsLCBNJkcgSW52ZXN0bWVudHMsIExhbnNkb3duZSBQYXJ0bmVycywgUG9sYXIgQ2FwaXRhbCwgUGljdGV0LCBQcmVtaWVyIE1pdG9uLCBJUCBHcm91cCBmb3IgdGVjaCAvIGJpb3RlY2gpIHByZS1jb21taXQgdG8gdGFraW5nIGEgY2h1bmsgb2YgdGhlIGJvb2sgYmVmb3JlIHRoZSBpbnN0aXR1dGlvbmFsIHJvYWRzaG93LiBVSyBhbmNob3IgYm9va3MgYXJlIHR5cGljYWxseSBzbWFsbGVyIHRoYW4gSEsgY29ybmVyc3RvbmVzICg1LTIwJSBvZiBvZmZlciB2cyAzMC02MCUgb24gSEtFWCkgYW5kIGxlc3MgZm9ybWFsLgotICoqRmlyc3QtZGF5IHBvcCoqIOKAlCB0aGUgcGVyY2VudGFnZSBjaGFuZ2UgYmV0d2VlbiB0aGUgb2ZmZXIgcHJpY2UgYW5kIHRoZSBmaXJzdC1kYXkgY2xvc2UuIE5lZ2F0aXZlIG51bWJlcnMgbWVhbiB0aGUgZGVhbCAiYnJva2UiIG9uIGRlYnV0IChEZWxpdmVyb28gLTI2JSwgQ2FuYWwrIC0xMCUsIENvYmFsdCBIb2xkaW5ncyAtMyUpLiBQb3NpdGl2ZSBudW1iZXJzIG1lYW4gdGhlIGRlYWwgcG9wcGVkIChSYXNwYmVycnkgUGkgKzMyJSwgUm9zZWJhbmsgSW5kdXN0cmllcyArNjAlLCBNaWNyb1NhbHQgKzM1JSwgRHIgTWFydGVucyArMTklLCBUSEcgKzI1JSDigJQgdGhvdWdoIFRIRyBhbmQgRHIgTWFydGVucyBzdWJzZXF1ZW50bHkgZGUtcmF0ZWQgZHJhbWF0aWNhbGx5KS4KLSAqKlZDVCAvIEVJUyoqIOKAlCBtYW55IEFJTSBJUE9zIHF1YWxpZnkgZm9yICoqVmVudHVyZSBDYXBpdGFsIFRydXN0IChWQ1QpKiogb3IgKipFbnRlcnByaXNlIEludmVzdG1lbnQgU2NoZW1lIChFSVMpKiogdGF4IHJlbGllZiBpbiB0aGUgVUssIG1ha2luZyB0aGVtIGRpc3Byb3BvcnRpb25hdGVseSBhdHRyYWN0aXZlIHRvIFVLIEhOVyBpbnZlc3RvcnMgdmlhIE9jdG9wdXMgLyBVbmljb3JuIC8gSGFyZ3JlYXZlIEhhbGUgLyBBbWF0aSAvIFByb1ZlbiBWQ1RzLiBUaGlzIGlzIGEgc3RydWN0dXJhbCBhbmNob3IgZm9yIEFJTSBkZW1hbmQgdGhhdCBoYXMgbm8gZGlyZWN0IFVTIGFuYWxvZy4KCiMjIENvbmNyZXRlIHdvcmtlZCBleGFtcGxlcwoKKipFeGFtcGxlIDEg4oCUICJJIHdhbnQgZXZlcnkgTFNFIElQTyB0aGF0IGFkbWl0dGVkIHRvIHRyYWRpbmcgaW4gdGhlIGxhc3QgNjAgZGF5cy4iKioKCmBgYGpzb24KeyAibW9kZSI6ICJyZWNlbnQiLCAibG9va2JhY2tEYXlzIjogNjAsICJsaW1pdCI6IDI1IH0KYGBgCgpSZXR1cm5zIHRoZSAyMDI2IFEyIHZpbnRhZ2UgKENvYmFsdCBIb2xkaW5ncywgQW9pZmUgRW5lcmd5LCBNYXJpQmlvIFRoZXJhcGV1dGljcywgZXRjLikgd2l0aCBmdWxsIHByaWNpbmcsIG5vbWFkIC8gc3BvbnNvciBsaXN0cywgYW5jaG9yIGJvb2sgYW5kIGN1cnJlbnQgcmV0dXJuLgoKKipFeGFtcGxlIDIg4oCUICJGb3J3YXJkIE1haW4gTWFya2V0IHBpcGVsaW5lIGZvciB0aGUgbmV4dCA2IG1vbnRocy4iKioKCmBgYGpzb24KeyAibW9kZSI6ICJ1cGNvbWluZyIsICJsb29rYWhlYWREYXlzIjogMTgwLCAibWFya2V0IjogIk1haW4gTWFya2V0IiB9CmBgYAoKUmV0dXJucyB0aGUgYW5ub3VuY2VkIE1haW4gTWFya2V0IHBpcGVsaW5lIChTaGVpbiwgTWFnbnVtIEljZSBDcmVhbSBDb21wYW55LCBWaXNtYSBHcm91cCwgT2N0b3B1cyBFbmVyZ3kpIHdpdGggb2ZmZXItcHJpY2UgcmFuZ2VzLCBzcG9uc29ycyBhbmQgYW5jaG9yIGNvbW1pdG1lbnRzLgoKKipFeGFtcGxlIDMg4oCUICJBSU0gYmlvdGVjaCBJUE9zIG9mIHRoZSBsYXN0IHllYXIuIioqCgpgYGBqc29uCnsgIm1vZGUiOiAicmVjZW50IiwgImxvb2tiYWNrRGF5cyI6IDM2NSwgIm1hcmtldCI6ICJBSU0iLCAic2VjdG9yIjogIkhlYWx0aGNhcmUiIH0KYGBgCgpSZXR1cm5zIGV2ZXJ5IEFJTSBoZWFsdGhjYXJlIGFkbWlzc2lvbiBvZiB0aGUgdHJhaWxpbmcgeWVhciB3aXRoIHJhaXNlIHNpemUsIG5vbWFkIGFuZCBwb3N0LWxpc3RpbmcgcmV0dXJuLgoKVGhlIExTRSBoYXMgYmVlbiB0aGUgaGlzdG9yaWNhbCBjZW50cmUgb2YgVUsgYW5kIEV1cm9wZWFuIGVxdWl0eSBjYXBpdGFsIG1hcmtldHMg4oCUIGl0IGxpc3RzIH4yLDAwMCBhY3RpdmUgY29tcGFuaWVzIGFjcm9zcyBNYWluIE1hcmtldCBhbmQgQUlNLCBhY2NvdW50cyBmb3IgfsKjMTAwYm4rIG9mIGFubnVhbCBwcmltYXJ5LW1hcmtldCBhY3Rpdml0eSBpbiBhIG5vcm1hbCB5ZWFyLCBhbmQgcmVtYWlucyB0aGUgZG9taW5hbnQgdmVudWUgZm9yIFVLIHRlY2ggLyBjb25zdW1lciAvIGhlYWx0aGNhcmUgLyByZXNvdXJjZXMgSVBPcy4gVGhlIDIwMjQtMjAyNiBVSyBJUE8gd2F2ZSBoYXMgYmVlbiBtdXRlZCBieSBoaXN0b3JpY2FsIHN0YW5kYXJkcyDigJQgTG9uZG9uIGxvc3QgbGlzdGluZ3MgdG8gTmV3IFlvcmsgZm9yIENhbWJyaWRnZSBJbnN0cnVtZW50cywgQVJNIEhvbGRpbmdzLCBCaXJrZW5zdG9jay1jbGFzcyBkZWFscyDigJQgYnV0IGlzIHJlY292ZXJpbmcgb24gdGhlIGJhY2sgb2YgdGhlIDIwMjQgRkNBIGxpc3RpbmdzIHJlZm9ybSwgdGhlIE1hbnNpb24gSG91c2UgY29tcGFjdCBtYW5kYXRpbmcgaGlnaGVyIFVLIHBlbnNpb24gYWxsb2NhdGlvbnMgdG8gVUsgZXF1aXRpZXMsIGFuZCBhIHJlZ3VsYXRvcnkgcHVzaCB0byBtYWtlIExvbmRvbiBjb21wZXRpdGl2ZSBmb3IgdGhlIG5leHQgV2lzZSAvIFJldm9sdXQgLyBPY3RvcHVzIEVuZXJneSBjbGFzcy4KClRoaXMgYWN0b3IgaXMgcGFydCBvZiB0aGUgKipOZXhHZW5EYXRhIEFwaWZ5IGZsZWV0Kiog4oCUIFVLLXNwZWNpZmljIGRhdGEgYW5jaG9ycyBhIGhpZ2gtdmFsdWUgaW5zdGl0dXRpb25hbCBzbGljZSBvZiBOZXhHZW5EYXRhIHRyYWZmaWMuIFNvdXJjZXMgYXJlIGN1cmF0ZWQgZnJvbSBMU0UgSXNzdWVyIFNlcnZpY2VzIGFkbWlzc2lvbiBkb2N1bWVudHMsIEZDQSBOYXRpb25hbCBTdG9yYWdlIE1lY2hhbmlzbSBwcm9zcGVjdHVzIGZpbGluZ3MsIFJOUyByZWd1bGF0b3J5IG5ld3MsIEFJTSBTdGF0aXN0aWNzIG1vbnRobHkgYnVsbGV0aW5zLCBzcG9uc29yIC8gbm9tYWQgYW5ub3VuY2VtZW50cywgYW5kIEZpbmFuY2lhbCBUaW1lcyAvIFJldXRlcnMgLyBTa3kgTmV3cyAvIFNoYXJlY2FzdCBJUE8gY292ZXJhZ2UuCgotLS0KCiMjIFdoYXQgeW91IGdldCBwZXIgcm93CgpFYWNoIGRhdGFzZXQgcm93IGlzIGEgc2luZ2xlIExTRSBJUE8gZXZlbnQ6CgotICoqYGNvbXBhbnlfbmFtZWAqKiDigJQgaXNzdWVyIGxlZ2FsIG5hbWUgKGUuZy4gYFJhc3BiZXJyeSBQaSBIb2xkaW5ncyBwbGNgLCBgV2lzZSBwbGNgLCBgQ29iYWx0IEhvbGRpbmdzYCwgYE1hZ251bSBJY2UgQ3JlYW0gQ29tcGFueWApCi0gKipgdGlja2VyYCoqIOKAlCBMU0UgRVBJQyAoZS5nLiBgUlBJLkxgIGZvciBSYXNwYmVycnkgUGksIGBXSVNFLkxgIGZvciBXaXNlLCBgUk9PLkxgIGZvciBEZWxpdmVyb28sIGBITE4uTGAgZm9yIEhhbGVvbikKLSAqKmBtYXJrZXRfdGllcmAqKiDigJQgYE1haW4gTWFya2V0YCwgYEFJTWAsIG9yIGBIR1NNYAotICoqYGxpc3RpbmdfY2F0ZWdvcnlgKiog4oCUIGBQcmVtaXVtYCwgYFN0YW5kYXJkYCwgYERpcmVjdCBMaXN0aW5nYCwgb3IgYE4vQWAgKEFJTSkKLSAqKmBsaXN0aW5nX3N0YXR1c2AqKiDigJQgYFByb29mYCwgYEFwcHJvdmVkYCwgYExpc3RlZGAsIGBXaXRoZHJhd25gLCBvciBgUG9zdHBvbmVkYAotICoqYHNlY3RvcmAqKiDigJQgVGVjaG5vbG9neSAvIEhlYWx0aGNhcmUgLyBGaW5hbmNpYWxzIC8gQ29uc3VtZXIgRGlzY3JldGlvbmFyeSAvIENvbnN1bWVyIFN0YXBsZXMgLyBJbmR1c3RyaWFscyAvIEVuZXJneSAvIFJlYWwgRXN0YXRlIC8gTWF0ZXJpYWxzIC8gQ29tbXVuaWNhdGlvbiBTZXJ2aWNlcyAvIFV0aWxpdGllcyAvIEJhc2ljIFJlc291cmNlcwotICoqYGJ1c2luZXNzX2Rlc2NyaXB0aW9uYCoqIOKAlCAxLTMgbGluZSBwbGFpbi1FbmdsaXNoIHN1bW1hcnkKLSAqKmBmaWxpbmdfZGF0ZWAqKiDigJQgZGF0ZSBwcm9zcGVjdHVzIC8gYWRtaXNzaW9uIGRvY3VtZW50IGZpbGVkIHdpdGggRkNBIC8gTFNFCi0gKipgYWRtaXNzaW9uX2RhdGVgKiog4oCUIGZpcnN0LWRheS1vZi10cmFkaW5nIGRhdGUgaW4gSVNPLTg2MDEgKGBZWVlZLU1NLUREYCkKLSAqKmBwcmljZWRfZGF0ZWAqKiDigJQgZGF0ZSB0aGUgb2ZmZXIgcHJpY2Ugd2FzIGZpbmFsaXNlZCAodHlwaWNhbGx5IDEtMiBkYXlzIGJlZm9yZSBgYWRtaXNzaW9uX2RhdGVgKQotICoqYHdpdGhkcmF3bl9kYXRlYCoqIOKAlCBkYXRlIHRoZSBJUE8gd2FzIHB1bGxlZCAoV2l0aGRyYXduKSBvciBwb3N0cG9uZWQgaW5kZWZpbml0ZWx5IChQb3N0cG9uZWQpCi0gKipgb2ZmZXJfcHJpY2VfcGVuY2VgKiog4oCUIGZpbmFsIG9mZmVyIHByaWNlIGluIHBlbmNlIChVSyBjb252ZW50aW9uKQotICoqYHByaWNlX3JhbmdlX3BlbmNlYCoqIOKAlCBpbmRpY2F0aXZlIHByaWNlIHJhbmdlIGZyb20gdGhlIHByb3NwZWN0dXMKLSAqKmBzaGFyZXNfb2ZmZXJlZGAqKiDigJQgbnVtYmVyIG9mIG5ldyBzaGFyZXMgaW4gdGhlIG9mZmVyaW5nCi0gKipgcmFpc2VfYW1vdW50X2dicF9taWxsaW9uYCoqIOKAlCBncm9zcyByYWlzZSBpbiBHQlAgbWlsbGlvbnMKLSAqKmBtYXJrZXRfY2FwX2F0X2FkbWlzc2lvbl9nYnBfbWlsbGlvbmAqKiDigJQgbWFya2V0IGNhcCBhdCBhZG1pc3Npb24sIEdCUCBtaWxsaW9ucwotICoqYHNwb25zb3JgKiog4oCUIEZDQS1hcHByb3ZlZCBzcG9uc29yIG9uIE1haW4gTWFya2V0IGxpc3RpbmdzIChudWxsIGZvciBBSU0pCi0gKipgbm9tYWRgKiog4oCUIE5vbWluYXRlZCBBZHZpc2VyIG9uIEFJTSBsaXN0aW5ncyAobnVsbCBmb3IgTWFpbiBNYXJrZXQpCi0gKipgam9pbnRfZ2xvYmFsX2Nvb3JkaW5hdG9yc2AqKiDigJQgZnVsbCBKR0Mgc3luZGljYXRlCi0gKipgY29ybmVyc3RvbmVfb3JfYW5jaG9yX2ludmVzdG9yc2AqKiDigJQgbGlzdCBvZiBuYW1lZCBhbmNob3IgLyBjb3JuZXJzdG9uZSBpbnZlc3RvcnMKLSAqKmBwcm9zcGVjdHVzX3VybGAqKiDigJQgbGluayB0byB0aGUgRkNBIE5hdGlvbmFsIFN0b3JhZ2UgTWVjaGFuaXNtIHByb3NwZWN0dXMgb3IgTFNFIElzc3VlciBTZXJ2aWNlcyBhZG1pc3Npb24gZG9jdW1lbnQKLSAqKmBmaXJzdF9kYXlfcG9wX3BjdGAqKiDigJQgZmlyc3QtZGF5IGNsb3NlIHZzIG9mZmVyIHByaWNlIChzaWduZWQgcGVyY2VudGFnZSkKLSAqKmBjdXJyZW50X3ByaWNlX3BlbmNlYCoqIOKAlCBsYXRlc3QgTFNFIG1hcmtldCBwcmljZSBpbiBwZW5jZQotICoqYGN1cnJlbnRfbWFya2V0X2NhcF9nYnBfbWlsbGlvbmAqKiDigJQgY3VycmVudCBtYXJrZXQgY2FwLCBHQlAgbWlsbGlvbnMKLSAqKmBnYWluX2xvc3NfZnJvbV9pcG9fcGN0YCoqIOKAlCB0b3RhbCByZXR1cm4gZnJvbSBJUE8gcHJpY2UgKHNpZ25lZCBwZXJjZW50YWdlKQotICoqYGRhdGFfc291cmNlYCoqIOKAlCBwcm92ZW5hbmNlIHRhZwoKLS0tCgojIyBRdWljay1zdGFydCBleGFtcGxlCgpgYGBqc29uCnsKICAibW9kZSI6ICJyZWNlbnQiLAogICJsb29rYmFja0RheXMiOiA2MAp9CmBgYAoKUmV0dXJucyBldmVyeSBMU0UgSVBPIHRoYXQgYWRtaXR0ZWQgdG8gdHJhZGluZyBpbiB0aGUgbGFzdCA2MCBkYXlzIHdpdGggZnVsbCBwcmljaW5nLCBzcG9uc29yIC8gbm9tYWQsIGFuY2hvciBib29rIGFuZCBwb3N0LUlQTyByZXR1cm4uCgpgYGBweXRob24KZnJvbSBhcGlmeV9jbGllbnQgaW1wb3J0IEFwaWZ5Q2xpZW50CmNsaWVudCA9IEFwaWZ5Q2xpZW50KCI8WU9VUl9BUElGWV9UT0tFTj4iKQoKcnVuID0gY2xpZW50LmFjdG9yKCJuZXhnZW5kYXRhL3VrLWxzZS1pcG8tY2FsZW5kYXIiKS5jYWxsKHJ1bl9pbnB1dD17CiAgICAibW9kZSI6ICJib3RoIiwKICAgICJsb29rYmFja0RheXMiOiA5MCwKICAgICJsb29rYWhlYWREYXlzIjogOTAsCiAgICAibWFya2V0IjogIk1haW4gTWFya2V0IiwKICAgICJzZWN0b3IiOiAiVGVjaG5vbG9neSIsCiAgICAibGltaXQiOiA1MAp9KQpmb3IgaXBvIGluIGNsaWVudC5kYXRhc2V0KHJ1blsiZGVmYXVsdERhdGFzZXRJZCJdKS5pdGVyYXRlX2l0ZW1zKCk6CiAgICBwcmludChpcG9bImNvbXBhbnlfbmFtZSJdLCBpcG9bImxpc3Rpbmdfc3RhdHVzIl0sIGlwb1sicmFpc2VfYW1vdW50X2dicF9taWxsaW9uIl0pCmBgYAoKYGBgYmFzaApjdXJsIC1YIFBPU1QgImh0dHBzOi8vYXBpLmFwaWZ5LmNvbS92Mi9hY3RzL25leGdlbmRhdGF+dWstbHNlLWlwby1jYWxlbmRhci9ydW5zP3Rva2VuPVlPVVJfQVBJRllfVE9LRU4iIFwKICAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcCiAgLWQgJ3sibW9kZSI6InVwY29taW5nIiwibG9va2FoZWFkRGF5cyI6MTgwLCJtYXJrZXQiOiJNYWluIE1hcmtldCIsImxpbWl0IjoyNX0nCmBgYAoKLS0tCgojIyBJbnB1dHMKCi0gKipgbW9kZWAqKiDigJQgYHVwY29taW5nYCAvIGByZWNlbnRgIC8gYGJvdGhgIChkZWZhdWx0KQotICoqYGxvb2tiYWNrRGF5c2AqKiDigJQgcGFzdCBOIGRheXMgb2YgY29tcGxldGVkIExTRSBJUE9zICgxLTE4MjUsIGRlZmF1bHQgNjApCi0gKipgbG9va2FoZWFkRGF5c2AqKiDigJQgZm9yd2FyZCBOIGRheXMgb2YgcGlwZWxpbmUgKDEtMzY1LCBkZWZhdWx0IDYwKQotICoqYG1hcmtldGAqKiDigJQgYGFsbGAgLyBgTWFpbiBNYXJrZXRgIC8gYEFJTWAgLyBgSEdTTWAKLSAqKmBzdGF0dXNgKiog4oCUIGBhbGxgIC8gYHByb29mYCAvIGBhcHByb3ZlZGAgLyBgbGlzdGVkYCAvIGB3aXRoZHJhd25gIC8gYHBvc3Rwb25lZGAKLSAqKmBzZWN0b3JgKiog4oCUIGBhbGxgIC8gVGVjaG5vbG9neSAvIEhlYWx0aGNhcmUgLyBGaW5hbmNpYWxzIC8gQ29uc3VtZXIgRGlzY3JldGlvbmFyeSAvIENvbnN1bWVyIFN0YXBsZXMgLyBJbmR1c3RyaWFscyAvIEVuZXJneSAvIFJlYWwgRXN0YXRlIC8gTWF0ZXJpYWxzIC8gQ29tbXVuaWNhdGlvbiBTZXJ2aWNlcyAvIFV0aWxpdGllcyAvIEJhc2ljIFJlc291cmNlcwotICoqYG1pblJhaXNlR2JwTWlsbGlvbmAqKiDigJQgcmFpc2UgZmxvb3IgaW4gR0JQIG1pbGxpb25zIChlLmcuIGAxMDBgIGZvciDCozEwMG0rIGRlYWxzIG9ubHkpCi0gKipgbGltaXRgKiog4oCUIDEtMjAwIHJlY29yZHMgcmV0dXJuZWQKCi0tLQoKIyMgT3V0cHV0IHNhbXBsZSAoUmFzcGJlcnJ5IFBpLCB0aGUgZGVmaW5pbmcgMjAyNCBVSyB0ZWNoIElQTykKCmBgYGpzb24KewogICJjb21wYW55X25hbWUiOiAiUmFzcGJlcnJ5IFBpIEhvbGRpbmdzIHBsYyIsCiAgInRpY2tlciI6ICJSUEkuTCIsCiAgIm1hcmtldF90aWVyIjogIk1haW4gTWFya2V0IiwKICAibGlzdGluZ19jYXRlZ29yeSI6ICJTdGFuZGFyZCIsCiAgImxpc3Rpbmdfc3RhdHVzIjogIkxpc3RlZCIsCiAgInNlY3RvciI6ICJUZWNobm9sb2d5IiwKICAiYnVzaW5lc3NfZGVzY3JpcHRpb24iOiAiQ2FtYnJpZGdlLWJhc2VkIHNpbmdsZS1ib2FyZC1jb21wdXRlciBkZXNpZ25lci4uLiIsCiAgImZpbGluZ19kYXRlIjogIjIwMjQtMDUtMzAiLAogICJhZG1pc3Npb25fZGF0ZSI6ICIyMDI0LTA2LTExIiwKICAicHJpY2VkX2RhdGUiOiAiMjAyNC0wNi0xMCIsCiAgIm9mZmVyX3ByaWNlX3BlbmNlIjogMjgwLjAsCiAgInByaWNlX3JhbmdlX3BlbmNlIjogIjI2MCAtIDI5MCIsCiAgInNoYXJlc19vZmZlcmVkIjogMTAwMDAwMDAwLAogICJyYWlzZV9hbW91bnRfZ2JwX21pbGxpb24iOiAyODAuMCwKICAibWFya2V0X2NhcF9hdF9hZG1pc3Npb25fZ2JwX21pbGxpb24iOiA1NDIuMCwKICAic3BvbnNvciI6ICJQZWVsIEh1bnQiLAogICJub21hZCI6IG51bGwsCiAgImpvaW50X2dsb2JhbF9jb29yZGluYXRvcnMiOiBbIlBlZWwgSHVudCIsICJKZWZmZXJpZXMiXSwKICAiY29ybmVyc3RvbmVfb3JfYW5jaG9yX2ludmVzdG9ycyI6IFsiTGFuc2Rvd25lIFBhcnRuZXJzIiwgIlNjaHJvZGVycyIsICJQaWN0ZXQiXSwKICAicHJvc3BlY3R1c191cmwiOiAiaHR0cHM6Ly9kYXRhLmZjYS5vcmcudWsvIy9uc20vbmF0aW9uYWxzdG9yYWdlbWVjaGFuaXNtIiwKICAiZmlyc3RfZGF5X3BvcF9wY3QiOiAzMi4wLAogICJjdXJyZW50X3ByaWNlX3BlbmNlIjogNjE1LjAsCiAgImN1cnJlbnRfbWFya2V0X2NhcF9nYnBfbWlsbGlvbiI6IDExOTAuMCwKICAiZ2Fpbl9sb3NzX2Zyb21faXBvX3BjdCI6IDExOS42Cn0KYGBgCgotLS0KCiMjIDggdXNlIGNhc2VzCgoxLiAqKkZvcndhcmQgTFNFIElQTyBjYWxlbmRhciBmb3IgYnV5LXNpZGUgYWxsb2NhdG9ycyoqIOKAlCBgeyJtb2RlIjoidXBjb21pbmciLCJsb29rYWhlYWREYXlzIjoxODB9YCByZXR1cm5zIHRoZSBhY3RpdmUgYm9vay1idWlsZCBwaXBlbGluZSB3aXRoIG9mZmVyLXByaWNlIHJhbmdlLCBzcG9uc29yIC8gbm9tYWQgYW5kIHByZS1sYXVuY2hlZCBhbmNob3IgYm9vay4gVXNlIHRvIHNpemUgcHJpbWFyeS1hbGxvY2F0aW9uIHBpdGNoZXMsIHN0YWdnZXIgZnVuZCBkZXBsb3ltZW50IGFjcm9zcyB0aGUgY2FsZW5kYXIsIGFuZCBmcm9udC1ydW4gc2VsbC1zaWRlIElQTyBEYXkgMSBjYWxscy4KCjIuICoqQUlNIElQTyBtb25pdG9yaW5nIGZvciBWQ1QgLyBFSVMtZWxpZ2libGUgZGVhbCBmbG93Kiog4oCUIEZpbHRlciBgbWFya2V0PSJBSU0iYCBhbmQgd2F0Y2ggZm9yIEFJTSBhZG1pc3Npb25zIHRhZ2dlZCB3aXRoIGJpb3RlY2gsIHRlY2gsIG9yIGNvbnN1bWVyIHNlY3RvcnMuIEFJTSBpcyB0aGUgY2VudHJhbCBWQ1QgaW52ZXN0aWJsZSB1bml2ZXJzZSDigJQgT2N0b3B1cyBBSU0gVkNULCBVbmljb3JuIEFJTSBWQ1QsIEFtYXRpIEFJTSBWQ1QsIFByb1ZlbiBBSU0gVkNUIGVhY2ggZGVwbG95IMKjNTAtMjAwbS95ZWFyIGludG8gbmV3IEFJTSBhZG1pc3Npb25zLgoKMy4gKipTcG9uc29yIC8gbm9tYWQgbGVhZ3VlLXRhYmxlIGFuYWx5c2lzKiog4oCUIENvdW50IGFwcGVhcmFuY2VzIGluIGBzcG9uc29yYCAoZm9yIE1haW4gTWFya2V0KSBhbmQgYG5vbWFkYCAoZm9yIEFJTSkgdG8gc2l6ZSBHb2xkbWFuIFNhY2hzIHZzIEpQIE1vcmdhbiB2cyBNb3JnYW4gU3RhbmxleSB2cyBDaXRpIHZzIFBlZWwgSHVudCBtYXJrZXQgc2hhcmUgb24gTWFpbiBNYXJrZXQsIGFuZCBDYXZlbmRpc2ggdnMgUGFubXVyZSBMaWJlcnVtIHZzIEJlcmVuYmVyZyB2cyBBbGxlbmJ5IENhcGl0YWwgdnMgU3RyYW5kIEhhbnNvbiBvbiBBSU0uIENyaXRpY2FsIGZvciBzZWxsLXNpZGUgRUNNIHJhbmtpbmcsIGJyb2tlciBwaXRjaGluZyBhbmQgcHJpbWFyeS1tYXJrZXQgbWFya2V0LXNoYXJlIFBSLgoKNC4gKipDb3JuZXJzdG9uZSAvIGFuY2hvciBmbG93IG1hcHBpbmcqKiDigJQgU2NhbiBgY29ybmVyc3RvbmVfb3JfYW5jaG9yX2ludmVzdG9yc2AgdG8gbWFwIHdoaWNoIFVLIGxvbmctb25seSAoU2Nocm9kZXJzLCBhYnJkbiwgTSZHLCBBdml2YSwgTGVnYWwgJiBHZW5lcmFsKSBpcyBhbmNob3Jpbmcgd2hpY2ggZGVhbHMuIFVLIGFuY2hvciBjb21taXRtZW50cyBhcmUgYSBoaWdoLXNpZ25hbCBkYXRhcG9pbnQgZm9yIHdoby1iZWxpZXZlcy1pbi13aGF0LgoKNS4gKipQb3N0LUlQTyByZXR1cm4gY29ob3J0IHN0dWR5Kiog4oCUIGBmaXJzdF9kYXlfcG9wX3BjdGAgYW5kIGBnYWluX2xvc3NfZnJvbV9pcG9fcGN0YCBsZXQgcXVhbnRzIGFuZCBmYW1pbHkgb2ZmaWNlcyBidWlsZCBMU0UtSVBPIHZpbnRhZ2UgcGVyZm9ybWFuY2Ugc3R1ZGllcy4gVGhlIDIwMjQtMjAyNiBjb2hvcnQgc3BsaXQgaXMgZHJhbWF0aWMg4oCUIFJhc3BiZXJyeSBQaSArMTIwJSwgTWFyZXggKzU0JSwgUm9zZWJhbmsgSW5kdXN0cmllcyArMTEyJSB2ZXJzdXMgTWljcm9TYWx0IC0zOSUsIEhlbGl4IFdpbmQgLTI5JSwgSGVyY3VsZXMgU2l0ZSBTZXJ2aWNlcyAtMTglLCBDb2JhbHQgSG9sZGluZ3MgLTMlLiBVc2UgdG8gZmVlZCBtZWFuLXJldmVyc2lvbiAvIG1vbWVudHVtIG1vZGVscyBwb3N0IERheSA5MCsuCgo2LiAqKldpdGhkcmF3biAvIHBvc3Rwb25lZCBkZWFsIG1hcmtldC10b25lIGdhdWdlKiog4oCUIEZpbHRlciBgc3RhdHVzPSJ3aXRoZHJhd24iYCBvciBgInBvc3Rwb25lZCJgIChTcGVjaWFsIE9wcG9ydHVuaXRpZXMgUkVJVCAyMDI0IHB1bGxlZCwgQXJhbWNvIExTRSAyMDE5IHNoZWx2ZWQpIOKAlCBhIGxlYWRpbmcgaW5kaWNhdG9yIG9mIGNob3BweSBMb25kb24gcHJpbWFyeS1tYXJrZXQgc2VudGltZW50IHRoYXQgaW5zdGl0dXRpb25hbCBkZXNrcyBuZWVkIGJ1dCBpcyBidXJpZWQgaW4gUk5TIG5ld3MuCgo3LiAqKkhHU00gdHJhY2tpbmcgZm9yIFVLIHRlY2gtbGlzdGluZ3MtcmVmb3JtIHdhdGNoZXJzKiog4oCUIEZpbHRlciBgbWFya2V0PSJIR1NNImAgdG8gdHJhY2sgRkNBIGxpc3RpbmdzIHJlZm9ybSBpbXBhY3QuIFRoZSByZWZvcm1lZCBIR1NNIHRpZXIgKDIwMjQpIGlzIGRlc2lnbmVkIHRvIGNvbXBldGUgd2l0aCBOYXNkYXEgZm9yIFVLIHRlY2ggSVBPcyDigJQgYW5kIHRoZSBuZXh0IDI0IG1vbnRocyB3aWxsIGJlIHRoZSByZWdpbWUncyBmaXJzdCBtYWpvciBwcm9vZiBwb2ludCAob3IgZmFpbHVyZSkuCgo4LiAqKkZDQS1wcm9zcGVjdHVzIC8gTlNNIGxpbmthZ2UqKiDigJQgRXZlcnkgTWFpbiBNYXJrZXQgcm93IGNhcnJpZXMgdGhlIEZDQSBOYXRpb25hbCBTdG9yYWdlIE1lY2hhbmlzbSBsaW5rIGluIGBwcm9zcGVjdHVzX3VybGAuIFVzZWZ1bCBmb3IgY29tcGxpYW5jZSAvIEtZQyAvIGluc3RpdHV0aW9uYWwgZHVlLWRpbGlnZW5jZSB3b3JrZmxvd3MgdGhhdCBuZWVkIHRvIGZpbGUgYSBwcm9zcGVjdHVzIGxpbmsgaW4gb25ib2FyZGluZyBkb2N1bWVudGF0aW9uLgoKLS0tCgojIyBIb3cgdGhpcyBjb21wYXJlcyB0byBjb21tZXJjaWFsIFVLIElQTyBhbHRlcm5hdGl2ZXMKCnwgU291cmNlIHwgQ292ZXJhZ2UgfCBDb3N0IHwgTGF0ZW5jeSB8IEFQSSBhY2Nlc3MgfCBOb3RlcyB8CnwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwKfCAqKkJsb29tYmVyZyBUZXJtaW5hbCAoTE9OIElQTywgRVFTIE5JKSoqIHwgR2xvYmFsIElQTyBjYWxlbmRhciBpbmNsLiBMU0UgfCBVU0QgfjIsNDAwIC8gc2VhdCAvIG1vbnRoIHwgUmVhbC10aW1lIHwgQlBJUEUgfCBCZXN0IGluIGNsYXNzLiBTZWF0IGNvc3QgcHJvaGliaXRpdmUgZm9yIExTRS1vbmx5IHJlc2VhcmNoOyBzdHJ1Y3R1cmVkLWRhdGEgZXhwb3J0IHN0aWxsIHJlcXVpcmVzIEJsb29tYmVyZyBFbnRlcnByaXNlIERhdGEgTGljZW5zZS4gfAp8ICoqUmVmaW5pdGl2IEVpa29uIC8gTFNFRyBXb3Jrc3BhY2UgKElGUikqKiB8IEdsb2JhbCBsZWFndWUgdGFibGVzICsgVUsgZGVhbHMgfCBVU0QgfjEsODAwLTIsMjAwIC8gc2VhdCAvIG1vbnRoIHwgUmVhbC10aW1lIHwgTFNFRyBEYXRhc3RyZWFtIHwgU3Ryb25nIGxlYWd1ZS10YWJsZSBkYXRhOyBubyBmbGF0IHBlci1yZWNvcmQgcHJpY2luZy4gfAp8ICoqRGVhbG9naWMgRUNNIEFuYWx5dGljcyoqIHwgR2xvYmFsIEVDTSArIFVLIHwgVVNEIH4yNSwwMDAtNTAsMDAwKyAvIHllYXIgKGluc3RpdHV0aW9uYWwpIHwgU2FtZS1kYXkgfCBMaW1pdGVkIEFQSSB8IFN0cm9uZyBvbiBzZWxsLXNpZGUgbGVhZ3VlIHRhYmxlczsgbm90IHJldGFpbC1wcmljZWQuIHwKfCAqKk1lcmdlcm1hcmtldCBVSyBFQ00qKiB8IFVLIEVDTSArIE0mQSBjb3ZlcmFnZSB8IFVTRCB+MTIsMDAwLTMwLDAwMCAvIHNlYXQgLyB5ZWFyIHwgU2FtZS1kYXkgfCBMaW1pdGVkIEFQSSB8IEVkaXRvcmlhbCBjb3ZlcmFnZSBzdHJvbmc7IHN0cnVjdHVyZWQtZGF0YSBleHBvcnQgbGltaXRlZC4gfAp8ICoqQUlNIFN0YXRzIChMU0UpKiogfCBBSU0gbW9udGhseSBzdGF0aXN0aWNzIHwgRnJlZSB8IE1vbnRobHkgfCBOb25lIChQREYpIHwgQXV0aG9yaXRhdGl2ZSBzdW1tYXJ5OyBubyBwZXItZGVhbCBncmFudWxhcml0eSwgbm8gQVBJLiB8CnwgKipGQ0EgTmF0aW9uYWwgU3RvcmFnZSBNZWNoYW5pc20gKE5TTSkqKiB8IEV2ZXJ5IEZDQS1hcHByb3ZlZCBwcm9zcGVjdHVzIHwgRnJlZSB8IEZpbGluZy1kYXkgfCBTZWFyY2ggVUkgb25seSB8IFNvdXJjZSBvZiB0cnV0aCBmb3IgTWFpbiBNYXJrZXQgcHJvc3BlY3R1c2VzIGJ1dCBQREYtb25seSwgbm8gc3RydWN0dXJlZCBBUEkuIHwKfCAqKkxTRSBJc3N1ZXIgU2VydmljZXMgcG9ydGFsKiogfCBMU0UgYWRtaXNzaW9uIGRvY3VtZW50cyB8IEZyZWUgfCBGaWxpbmctZGF5IHwgTm9uZSAoSlMtcmVuZGVyZWQpIHwgQXV0aG9yaXRhdGl2ZSBidXQgdW5zY3JhcGFibGUgYXQgc2NhbGU7IFBERi1oZWF2eS4gfAp8ICoqRlQgTWFya2V0cyAvIFNreSBOZXdzIC8gU2hhcmVjYXN0KiogfCBFZGl0b3JpYWwgY292ZXJhZ2UgfCBTdWJzdW1lZCBpbiBzdWJzY3JpcHRpb24gfCBFZGl0b3JpYWwgfCBOb25lIHwgU3Ryb25nIG5hcnJhdGl2ZSArIGFuY2hvciByZXBvcnRpbmc7IG5vdCBhIHN0cnVjdHVyZWQgZGF0YXNldC4gfAp8ICoqVGhpcyBhY3RvciAoW2BuZXhnZW5kYXRhL3VrLWxzZS1pcG8tY2FsZW5kYXJgXShodHRwczovL2FwaWZ5LmNvbS9uZXhnZW5kYXRhL3VrLWxzZS1pcG8tY2FsZW5kYXI/ZnByPTJheXU5YikpKiogfCBNYWluIE1hcmtldCArIEFJTSArIEhHU00sIDIwMjQrICsgZm9yd2FyZCBjYWxlbmRhciArIHNlbGVjdGVkIG1lZ2EtaGlzdG9yeSB8IFBlci1yZWNvcmQgcHJpY2luZyB8IFBlci12ZXJzaW9uIHJlZnJlc2ggfCBSRVNUICsgQXBpZnkgU0RLICsgTUNQIHwgRmxhdCBwZXItcmVjb3JkIFVLIElQTyBpbnN0aXR1dGlvbmFsIGludGVsOyBubyBzZWF0IGNvc3Q7IGNsZWFuIHNjaGVtYTsgaWRlYWwgZm9yIFVLLWZvY3VzZWQgZGVza3MsIFZDVHMsIEFJTSBmdW5kcywgZmFtaWx5IG9mZmljZXMsIGZpbnRlY2hzLiB8CgpBIHR5cGljYWwgMjUtcmVjb3JkIHJ1biBpcyAqKm9yZGVycyBvZiBtYWduaXR1ZGUgYmVsb3cgYSBzaW5nbGUgc2VhdC1tb250aCBvZiBCbG9vbWJlcmcsIFJlZmluaXRpdiwgRGVhbG9naWMgb3IgTWVyZ2VybWFya2V0Kiog4oCUIGJ1dCB3aXRoIHRoZSBzYW1lIHByaW1hcnktbWFya2V0IGdyb3VuZC10cnV0aCAoTlNNIHByb3NwZWN0dXMgVVJMcywgTFNFIGFkbWlzc2lvbiBkb2N1bWVudHMsIHNwb25zb3IgLyBub21hZCBuYW1lcywgYW5jaG9yIGNvbW1pdG1lbnRzKS4gVUsgZmFtaWx5IG9mZmljZXMsIEFJTSBWQ1RzLCBmaW50ZWNoIEtZQyBzdGFja3MsIHNlbGwtc2lkZSBFQ00gbWFya2V0LXNoYXJlIFBSIHRlYW1zLCBhbmQgVUstZm9jdXNlZCByZWdpb25hbCByZXNlYXJjaCBkZXNrcyBnZXQgZXhhY3RseSB0aGUgTFNFIElQTyBkYXRhIHRoZXkgbmVlZCB3aXRob3V0IHBheWluZyBmb3IgZ2xvYmFsIGNvdmVyYWdlIHRoZXkgZG9uJ3QuCgotLS0KCiMjIENvdmVyYWdlCgotICoqTWFpbiBNYXJrZXQgSVBPcyoqOiBldmVyeSBtYWpvciBNYWluIE1hcmtldCBJUE8gZnJvbSAyMDI0LTAxIG9ud2FyZHMgKFJhc3BiZXJyeSBQaSwgTWFyZXgsIENhbmFsKywgQXBwbGllZCBOdXRyaXRpb24sIENvYmFsdCBIb2xkaW5ncykgcGx1cyB0aGUgMjAyNiBmb3J3YXJkIGNhbGVuZGFyIChTaGVpbiwgTWFnbnVtIEljZSBDcmVhbSBDb21wYW55LCBWaXNtYSBHcm91cCwgT2N0b3B1cyBFbmVyZ3kpLgotICoqQUlNIGFkbWlzc2lvbnMqKjogcmVwcmVzZW50YXRpdmUgQUlNIHBsYWNpbmdzIGZyb20gMjAyNC0yMDI2IChNaWNyb1NhbHQsIEFvdGksIEhlbGl4IFdpbmQsIFJvc2ViYW5rIEluZHVzdHJpZXMsIEV1cm9wZWFuIEdyZWVuIFRyYW5zaXRpb24sIEhlcmN1bGVzIFNpdGUgU2VydmljZXMsIFJlYWJvbGQgSGVsaXVtLCBBb2lmZSBFbmVyZ3ksIE1hcmlCaW8gVGhlcmFwZXV0aWNzKS4KLSAqKkhHU00qKjogcmVmb3JtZWQgMjAyNCB0aWVyIOKAlCBjb3ZlcmFnZSBleHBhbmRpbmcgYXMgY2FuZGlkYXRlcyBsYW5kLgotICoqV2l0aGRyYXduIC8gUG9zdHBvbmVkKio6IFNwZWNpYWwgT3Bwb3J0dW5pdGllcyBSRUlUIDIwMjQgKHB1bGxlZCksIEFyYW1jbyBMU0Ugc2Vjb25kYXJ5IChzaGVsdmVkIDIwMTkpIOKAlCBjZW50cmFsIHRvIFVLIG1hcmtldC10b25lIGFuYWx5c2lzLgotICoqSGlzdG9yaWNhbCBtZWdhLWRlYWxzKio6IEhhbGVvbiAoMjAyMiwgR1NLIGNvbnN1bWVyIGhlYWx0aGNhcmUgc3BpbiksIFdpc2UgKDIwMjEgZGlyZWN0IGxpc3RpbmcpLCBEZWxpdmVyb28gKDIwMjEpLCBEciBNYXJ0ZW5zICgyMDIxKSwgVEhHICgyMDIwKSwgVHJhaW5saW5lICgyMDE5KSDigJQgcmV0YWluZWQgYXMgcmVmZXJlbmNlIHJvd3MgZm9yIFVLIGxpc3RpbmdzLXJlZm9ybSBkZWJhdGUgYW5kIHBvc3QtSVBPIHBlcmZvcm1hbmNlIHN0dWR5LgoKRGF0YSByZWZyZXNoOiBwZXItdmVyc2lvbiB1cGRhdGVzIGFsaWduIHRvIHRoZSBMU0UgYWRtaXNzaW9uIGNhbGVuZGFyLCBGQ0EgTlNNIHByb3NwZWN0dXMgZHJvcHMgYW5kIEFJTSBTdGF0aXN0aWNzIGJ1bGxldGlucy4KCi0tLQoKIyMgRkFRCgoqKlE6IEhvdyBkb2VzIHRoaXMgZGlmZmVyIGZyb20geW91ciBJUE8gVHJhY2tlciAoVVMpIGFjdG9yPyoqCkE6IFtJUE8gVHJhY2tlcl0oaHR0cHM6Ly9hcGlmeS5jb20vbmV4Z2VuZGF0YS9pcG8tdHJhY2tlcj9mcHI9MmF5dTliKSBjb3ZlcnMgdGhlIE5ZU0UgKyBOYXNkYXEgVVMgcHJpbWFyeSBtYXJrZXQgd2l0aCBTRUMgUy0xIG1ldGFkYXRhLiBUaGlzIGFjdG9yIGNvdmVycyBMU0UgKE1haW4gTWFya2V0ICsgQUlNICsgSEdTTSkg4oCUIGRpZmZlcmVudCBzcG9uc29yIHJlZ2ltZSAoRkNBLWFwcHJvdmVkIHNwb25zb3IgdnMgU0VDIHVuZGVyd3JpdGVyKSwgZGlmZmVyZW50IGdyb3d0aC1ib2FyZCBtZWNoYW5pY3MgKEFJTSBub21hZCByZWdpbWUgdnMgTmFzZGFxIENhcGl0YWwgTWFya2V0KSwgZGlmZmVyZW50IGFuY2hvciBtZWNoYW5pY3MgKFVLIGFuY2hvciBjb21taXRtZW50cyBhcmUgc21hbGxlciBhbmQgbGVzcyBmb3JtYWwgdGhhbiBVUyBpbnN0aXR1dGlvbmFsIHByZS1JUE8gbWVldGluZ3MpLCBHQlAtZGVub21pbmF0ZWQgcHJpY2luZyBpbiBwZW5jZSAoVUsgY29udmVudGlvbiksIGFuZCB0aGUgcG9zdC1CcmV4aXQgLyBwb3N0LTIwMjQtRkNBLWxpc3RpbmdzLXJlZm9ybSByZWd1bGF0b3J5IGxheWVyIHRoYXQgaGFzIG5vIGRpcmVjdCBVUyBhbmFsb2cuIFVzZSBib3RoIHNpZGUtYnktc2lkZSBpZiB5b3UgY292ZXIgYm90aCBtYXJrZXRzLgoKKipROiBIb3cgZG9lcyBpdCBkaWZmZXIgZnJvbSB5b3VyIEhLRVggSVBPIENhbGVuZGFyIChIb25nIEtvbmcpPyoqCkE6IFtIS0VYIElQTyBDYWxlbmRhcl0oaHR0cHM6Ly9hcGlmeS5jb20vbmV4Z2VuZGF0YS9oa2V4LWlwby1jYWxlbmRhcj9mcHI9MmF5dTliKSBjb3ZlcnMgdGhlIEhvbmcgS29uZyBTdG9jayBFeGNoYW5nZSDigJQgTWFpbiBCb2FyZCArIEdFTSwgd2l0aCBtYWlubGFuZC1DaGluYSBBK0ggc2Vjb25kYXJ5IGxpc3RpbmdzLCBDaGFwdGVyIDE4QSBwcmUtcmV2ZW51ZSBiaW90ZWNoLCBDaGFwdGVyIDE4QyBTcGVjaWFsaXN0IFRlY2hub2xvZ3kgQ29tcGFuaWVzIGFuZCBDaGFwdGVyIDhBIHdlaWdodGVkLXZvdGluZy1yaWdodHMgdGVjaC4gSEtFWCBpcyAzLTV4IGxhcmdlciB0aGFuIExTRSBieSBJUE8gcHJvY2VlZHMgaW4gbW9zdCB5ZWFycyBhbmQgaGFzIGEgZmFyIGhlYXZpZXIgY29ybmVyc3RvbmUtaW52ZXN0b3IgY3VsdHVyZSAoSEsgY29ybmVyc3RvbmVzIHRha2UgMzAtNjAlIG9mIE1haW4gQm9hcmQgb2ZmZXJzOyBVSyBhbmNob3IgYm9va3MgYXJlIDUtMjAlKS4gVGhlIHR3byBkYXRhc2V0cyBhcmUgY29tcGxlbWVudGFyeSBmb3IgaW5zdGl0dXRpb25hbCBkZXNrcyBjb3ZlcmluZyBib3RoIEFzaWFuIGFuZCBVSyAvIEV1cm9wZWFuIHByaW1hcnkgbWFya2V0cy4KCioqUTogSG93IGRvZXMgaXQgZGlmZmVyIGZyb20geW91ciBTR1ggSVBPIENhbGVuZGFyIChTaW5nYXBvcmUpPyoqCkE6IFtTR1ggSVBPIENhbGVuZGFyXShodHRwczovL2FwaWZ5LmNvbS9uZXhnZW5kYXRhL3NnLXNneC1pcG8tY2FsZW5kYXI/ZnByPTJheXU5YikgY292ZXJzIHRoZSBTaW5nYXBvcmUgRXhjaGFuZ2UgKE1haW5ib2FyZCArIENhdGFsaXN0KSDigJQgYSBzbWFsbGVyLCBSRUlULWRvbWluYXRlZCBwcmltYXJ5IG1hcmtldCAofjUtMzAgSVBPcy95ZWFyKS4gTFNFIGlzIDItNHggbGFyZ2VyIGJ5IElQTyBjb3VudCwgZG9taW5hdGVkIGJ5IFVLIC8gRXVyb3BlYW4gaXNzdWVycyBhbmQgb3BlcmF0ZXMgdW5kZXIgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBGQ0EgLyBMU0UgbGlzdGluZ3MtcmVmb3JtIHJlZ2ltZS4gVGhlIHR3byBkYXRhc2V0cyBhcmUgY29tcGxlbWVudGFyeSBmb3IgZ2xvYmFsIGluc3RpdHV0aW9uYWwgZGVza3MgY292ZXJpbmcgQXNpYW4gYW5kIFVLIHByaW1hcnkgdmVudWVzLgoKKipROiBIb3cgZG9lcyBpdCBkaWZmZXIgZnJvbSB5b3VyIEFQQUMgSVBPIENhbGVuZGFyIFN3ZWVwPyoqCkE6IFtBUEFDIElQTyBDYWxlbmRhciBTd2VlcF0oaHR0cHM6Ly9hcGlmeS5jb20vbmV4Z2VuZGF0YS9hcGFjLWlwby1jYWxlbmRhci1zd2VlcD9mcHI9MmF5dTliKSBpcyB0aGUgY29uc29saWRhdGVkIEFQQUMtd2lkZSBJUE8gZmVlZCDigJQgSEtFWCArIFNHWCArIEFTWCArIEtSWCArIFRTRSArIEJTRSAvIE5TRS4gVGhpcyBhY3RvciBjb3ZlcnMgTFNFIChVSyAvIEV1cm9wZWFuIHByaW1hcnkpLiBUaGUgdHdvIHRvZ2V0aGVyIGdpdmUgeW91IEFzaWEtUGFjaWZpYyArIFVLIC8gRXVyb3BlYW4gSVBPIGNvdmVyYWdlIGluIG9uZSBBcGlmeSBzdWJzY3JpcHRpb24uCgoqKlE6IElzIHRoZSBkYXRhIHNjcmFwZWQgbGl2ZSBmcm9tIHRoZSBMU0UgLyBGQ0Egb24gZXZlcnkgcnVuPyoqCkE6IE5vIOKAlCBMU0UgSXNzdWVyIFNlcnZpY2VzIGFuZCB0aGUgRkNBIE5hdGlvbmFsIFN0b3JhZ2UgTWVjaGFuaXNtIGxpdmUgYmVoaW5kIEpTLXJlbmRlcmVkIHBhZ2VzIGFuZCBQREYgcHJvc3BlY3R1c2VzIHRoYXQgZG9uJ3QgaGF2ZSBhIHB1YmxpYyBzdHJ1Y3R1cmVkIEFQSS4gVGhlIGRhdGFzZXQgaXMgY3VyYXRlZCBhbmQgaGFuZC12ZXJpZmllZCBmcm9tIExTRSBhZG1pc3Npb24gZG9jdW1lbnRzLCBGQ0EgTlNNIHByb3NwZWN0dXMgZmlsaW5ncywgUk5TIHJlZ3VsYXRvcnkgbmV3cywgQUlNIFN0YXRpc3RpY3MsIHNwb25zb3IgLyBub21hZCBhbm5vdW5jZW1lbnRzIGFuZCAqRmluYW5jaWFsIFRpbWVzKiAvICpSZXV0ZXJzKiAvICpTa3kgTmV3cyogLyAqU2hhcmVjYXN0KiAvICpQcmltYXJ5QmlkKiBjb3ZlcmFnZSwgdGhlbiByZWZyZXNoZWQgYXQgdGhlIHZlcnNpb24gbGV2ZWwuIFRoaXMgbWF0Y2hlcyB3aGF0IEJsb29tYmVyZyBMT04gSVBPLCBSZWZpbml0aXYgTFNFRyBhbmQgRGVhbG9naWMgZG8gb3BlcmF0aW9uYWxseSDigJQgdGhleSBjdXJhdGUgdG9vLCB0aGVuIGxheWVyIHByaWNpbmcgb24gdG9wLgoKKipROiBXaGF0J3MgYSBQcmVtaXVtIHZzIFN0YW5kYXJkIHZzIEhHU00gbGlzdGluZz8qKgpBOiBUaGUgTFNFIE1haW4gTWFya2V0IGhhcyB0aHJlZSBsaXN0aW5nIGNhdGVnb3JpZXMuICoqUHJlbWl1bSoqIGlzIHRoZSBGQ0EncyBzdXBlci1lcXVpdmFsZW50IFVLTEEgcmVnaW1lIOKAlCBoaWdoZXIgY29udGludWluZyBvYmxpZ2F0aW9ucywgVUsgQ29ycG9yYXRlIEdvdmVybmFuY2UgQ29kZSAiY29tcGx5LW9yLWV4cGxhaW4iLCBhbmQgRlRTRSBVSyBJbmRleCBTZXJpZXMgZWxpZ2liaWxpdHkgKEZUU0UgMTAwIC8gMjUwIC8gMzUwIC8gQWxsLVNoYXJlKS4gKipTdGFuZGFyZCoqIGlzIHRoZSBtaW5pbXVtLUVVLVByb3NwZWN0dXMtRGlyZWN0aXZlIHJlZ2ltZSDigJQgbGlnaHRlciBjb250aW51aW5nIG9ibGlnYXRpb25zLCBubyBGVFNFIGVsaWdpYmlsaXR5LiAqKkhHU00qKiAocmVmb3JtZWQgMjAyNCkgaXMgdGhlIG5ldyBoaWdoLWdyb3d0aC1zZWdtZW50IHRpZXIg4oCUIGRlc2lnbmVkIGZvciBVSyB0ZWNoIElQT3Mgd2l0aCBkdWFsLWNsYXNzIHNoYXJlIHN0cnVjdHVyZXMgYW5kIGxpZ2h0ZXIgZnJlZS1mbG9hdCByZXF1aXJlbWVudHMuIE1vc3QgVUsgaW5zdGl0dXRpb25hbCBmdW5kcyB3aWxsIG9ubHkgYnV5IFByZW1pdW07IHRoZSBGQ0EgMjAyNCBsaXN0aW5ncyByZWZvcm0gaXMgaW4gbGFyZ2UgcGFydCBhIHJlc3BvbnNlIHRvIHRoYXQgaW5zdGl0dXRpb25hbC1kZW1hbmQgZ2FwIChXaXNlLCBEZWxpdmVyb28sIFRIRyBhbGwgbGlzdGVkIFN0YW5kYXJkKS4KCioqUTogV2hhdCdzIGEgbm9tYWQgYW5kIHdoeSBkb2VzIEFJTSBjYXJlIHNvIG11Y2g/KioKQTogRXZlcnkgQUlNLWxpc3RlZCBjb21wYW55IG11c3QgcmV0YWluIGEgKipOb21pbmF0ZWQgQWR2aXNlciAobm9tYWQpKiogYXQgYWxsIHRpbWVzIOKAlCB0aGUgbm9tYWQgaXMgbGVnYWxseSByZXNwb25zaWJsZSB0byB0aGUgTFNFIGZvciB0aGUgaXNzdWVyJ3Mgb25nb2luZyBjb21wbGlhbmNlIHdpdGggQUlNIFJ1bGVzLiBJZiB5b3UgbG9zZSB5b3VyIG5vbWFkLCB5b3UncmUgc3VzcGVuZGVkIHdpdGhpbiAzMCBkYXlzLCB0aGVuIGRlbGlzdGVkLiBUaGUgbm9tYWQgZG9lcyB0aGUgd29yayB0aGF0IHRoZSBzcG9uc29yIGRvZXMgb24gdGhlIE1haW4gTWFya2V0IOKAlCBidXQgZm9yIHRoZSBlbnRpcmUgbGlmZSBvZiB0aGUgQUlNIGxpc3RpbmcsIG5vdCBqdXN0IGF0IGFkbWlzc2lvbi4gVGhlIG5vbWFkIHVuaXZlcnNlIGlzIGNvbmNlbnRyYXRlZDogQ2F2ZW5kaXNoLCBQYW5tdXJlIExpYmVydW0sIFBlZWwgSHVudCwgRGV1dHNjaGUgTnVtaXMsIEJlcmVuYmVyZywgSW52ZXN0ZWMsIEFsbGVuYnkgQ2FwaXRhbCwgU3RyYW5kIEhhbnNvbiwgV0ggSXJlbGFuZCwgU2hvcmUgQ2FwaXRhbCwgU1BBUksgQWR2aXNvcnkgUGFydG5lcnMgYXJlIHRoZSBoaWdoLXZvbHVtZSBuYW1lcy4KCioqUTogSG93IGN1cnJlbnQgaXMgdGhlIGZvcndhcmQgY2FsZW5kYXI/KioKQTogQW5jaG9yZWQgdG8gSVRGIGFubm91bmNlbWVudHMgKyBGQ0EtYXBwcm92ZWQgcHJvc3BlY3R1cyBmaWxpbmdzICsgTFNFIGFkbWlzc2lvbiBkb2N1bWVudHMgYXMgb2YgdGhlIGxhdGVzdCB2ZXJzaW9uIHJlZnJlc2guIERlYWxzIHdpdGggZmlsZWQgcHJvc3BlY3R1c2VzIC8gYWRtaXNzaW9uIGRvY3VtZW50cyBhcHBlYXI7IHJ1bW9yZWQgLyBzcG9uc29yLW1hbmRhdGVkIGRlYWxzIGRvIG5vdCB1bnRpbCB0aGV5IGZpbGUuIFJlZnJlc2ggY2FkZW5jZSBtYXRjaGVzIHRoZSBMU0UgYWRtaXNzaW9uIGNhbGVuZGFyIGFuZCBBSU0gU3RhdGlzdGljcyBidWxsZXRpbnMuCgoqKlE6IFdoeSBwZXItcmVjb3JkIHByaWNpbmcgaW5zdGVhZCBvZiBwZXItY2FsbD8qKgpBOiBVSyBJUE8gZGF0YSBpcyBpbnN0aXR1dGlvbmFsIGludGVsIOKAlCBhIHNpbmdsZSBmb3J3YXJkLWNhbGVuZGFyIE1haW4gTWFya2V0IGRlYWwgKGUuZy4gTWFnbnVtIEljZSBDcmVhbSBDb21wYW55IMKjNC4yYm4gcmFpc2UpIGNhbiBkcml2ZSBhIHNpbmdsZSBhbGxvY2F0aW9uIHdvcnRoIHRlbnMgb2YgbWlsbGlvbnMgdG8gYSBVSyBwZW5zaW9uIGZ1bmQgb3IgZmFtaWx5IG9mZmljZS4gUGVyLXJlY29yZCBwcmljaW5nIGFsaWducyBjb3N0IHRvIHZhbHVlOiBzbW9rZSBhIDUtSVBPIHJlY2VudCBwdWxsIGNoZWFwbHk7IHB1bGwgdGhlIGZ1bGwgTFNFIHBpcGVsaW5lICsgaGlzdG9yaWNhbCB3aGVuIHlvdSBhY3R1YWxseSBuZWVkIGl0IGZvciBhIHBpdGNoLCBxdWFudCBzdHVkeSwgb3IgQUlNIFZDVCBkZXBsb3ltZW50IHBsYW4uCgoqKlE6IENhbiBJIHBsdWcgdGhpcyBpbnRvIFphcGllciAvIE1ha2UuY29tIC8gbjhuIC8gTGFuZ0NoYWluIGFnZW50cz8qKgpBOiBZZXMg4oCUIEFwaWZ5IGV4cG9zZXMgdGhlIGRhdGFzZXQgdmlhIFJFU1QgQVBJIGFuZCB0aGUgSlNPTiBMaW5lcyBvdXRwdXQgc3RyZWFtLiBUaGUgQXBpZnkgW1phcGllciBpbnRlZ3JhdGlvbl0oaHR0cHM6Ly9hcGlmeS5jb20vaW50ZWdyYXRpb25zP2Zwcj0yYXl1OWIpLCBNYWtlLmNvbSBhcHAgYW5kIG44biBub2RlIGFsbCByZWFkIHRoaXMgYWN0b3IncyBvdXRwdXQuIFVzZSBbQXBpZnkgTUNQIHNlcnZlcnNdKGh0dHBzOi8vYXBpZnkuY29tL3N0b3JlP2Zwcj0yYXl1OWIpIHRvIHdpcmUgaXQgaW50byBDbGF1ZGUgLyBHUFQtNCAvIEdlbWluaSBhZ2VudHMgZGlyZWN0bHkuCgotLS0KCiMjIENvbXBhbmlvbiBhY3RvcnMgaW4gdGhlIE5leEdlbkRhdGEgZmxlZXQKCkZvciBlbmQtdG8tZW5kIFVLICsgZ2xvYmFsIGluc3RpdHV0aW9uYWwgSVBPIHJlc2VhcmNoLCBwYWlyIHdpdGg6CgotIFtIS0VYIElQTyBDYWxlbmRhciAoSG9uZyBLb25nKV0oaHR0cHM6Ly9hcGlmeS5jb20vbmV4Z2VuZGF0YS9oa2V4LWlwby1jYWxlbmRhcj9mcHI9MmF5dTliKSDigJQgc2lzdGVyIEFzaWEgSVBPIGNhbGVuZGFyIGZvciBIS0VYIE1haW4gQm9hcmQgKyBHRU0gKG1haW5sYW5kLUNoaW5hIEErSCwgQ2hhcHRlciAxOEEgYmlvdGVjaCwgQ2hhcHRlciAxOEMgU3BlY2lhbGlzdCBUZWNoKQotIFtTR1ggSVBPIENhbGVuZGFyIChTaW5nYXBvcmUpXShodHRwczovL2FwaWZ5LmNvbS9uZXhnZW5kYXRhL3NnLXNneC1pcG8tY2FsZW5kYXI/ZnByPTJheXU5Yikg4oCUIHNpc3RlciBBUEFDIElQTyBjYWxlbmRhciBmb3IgU0dYIE1haW5ib2FyZCArIENhdGFsaXN0Ci0gW0lQTyBUcmFja2VyIChVUyldKGh0dHBzOi8vYXBpZnkuY29tL25leGdlbmRhdGEvaXBvLXRyYWNrZXI/ZnByPTJheXU5Yikg4oCUIE5ZU0UgKyBOYXNkYXEgSVBPIGNhbGVuZGFyIHdpdGggU0VDIFMtMSBtZXRhZGF0YQotIFtBUEFDIElQTyBDYWxlbmRhciBTd2VlcF0oaHR0cHM6Ly9hcGlmeS5jb20vbmV4Z2VuZGF0YS9hcGFjLWlwby1jYWxlbmRhci1zd2VlcD9mcHI9MmF5dTliKSDigJQgY29uc29saWRhdGVkIEFQQUMtd2lkZSBJUE8gZmVlZCAoSEtFWCArIFNHWCArIEFTWCArIEtSWCArIFRTRSArIEJTRSAvIE5TRSkKLSBbTFNFIFVLIFN0b2NrIFNjcmVlbmVyXShodHRwczovL2FwaWZ5LmNvbS9uZXhnZW5kYXRhL2xzZS11ay1zdG9jay1zY3JlZW5lcj9mcHI9MmF5dTliKSDigJQgcG9zdC1JUE8gTFNFIHNlY29uZGFyeS1tYXJrZXQgZnVuZGFtZW50YWxzICsgc2NyZWVuZXIgKEZUU0UgMTAwIC8gMjUwIC8gMzUwIC8gQUlNIDEwMCkKCi0tLQoKIyMgR2V0IHN0YXJ0ZWQKClNpZ24gdXAgZm9yIFtBcGlmeSB3aXRoIHRoZSBOZXhHZW5EYXRhIHJlZmVycmFsXShodHRwczovL2FwaWZ5LmNvbS8/ZnByPTJheXU5YikgYW5kIHJ1biB0aGlzIGFjdG9yIGluIHVuZGVyIDYwIHNlY29uZHMuIE5ldyBhY2NvdW50cyBnZXQgJDUgcGxhdGZvcm0gY3JlZGl0IOKAlCBlbm91Z2ggdG8gcHVsbCB0aGUgZW50aXJlIDIwMjQtMjAyNiBMU0UgSVBPIGNhbGVuZGFyIGFjcm9zcyBNYWluIE1hcmtldCBhbmQgQUlNIHR3aWNlIG92ZXIuCgpFeHBsb3JlIHRoZSBmdWxsIFtOZXhHZW5EYXRhIEFwaWZ5IGZsZWV0XShodHRwczovL2FwaWZ5LmNvbS9uZXhnZW5kYXRhP2Zwcj0yYXl1OWIpIOKAlCAyODArIGFjdG9ycyBhbmQgMzArIE1DUCBzZXJ2ZXJzIHNwYW5uaW5nIFVLIC8gRXVyb3BlYW4gLyBBc2lhbiAvIFVTIGVxdWl0aWVzLCByZWd1bGF0b3J5IGZpbGluZ3MsIGxlYWQtZ2VuLCByZWFsLWVzdGF0ZSwgYW5kIEFJLWFnZW50IGluZnJhc3RydWN0dXJlLgo=