| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
KEY_AD_POSITION |
"ad_position" |
public static final java.lang.String |
KEY_AD_REQUEST |
"ad_request" |
public static final java.lang.String |
KEY_AD_RESPONSE |
"ad_response" |
public static final java.lang.String |
KEY_AD_SIZE |
"ad_size" |
public static final java.lang.String |
KEY_FIRED_CLICK_BEACONS |
"fired_clicks" |
public static final java.lang.String |
KEY_FIRED_IMPRESSION_BEACONS |
"fired_impressions" |
public static final java.lang.String |
KEY_INTEGRATION_TYPE |
"integration_type" |
public static final java.lang.String |
KEY_IS_SIMULATOR |
"is_simulator" |
public static final java.lang.String |
KEY_OM_ENABLED |
"om_enabled" |
public static final java.lang.String |
KEY_OM_VENDORS |
"om_vendors" |
public static final java.lang.String |
KEY_RENDER_TIME |
"render_time" |
public static final java.lang.String |
KEY_RESPONSE_TIME |
"response_time" |
public static final java.lang.String |
KEY_TIME_TO_LOAD |
"time_to_load" |
public static final java.lang.String |
KEY_TIME_TO_LOAD_FAILED |
"time_to_load_failed" |
public static final java.lang.String |
KEY_ZONE_ID |
"zone_id" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BANNER |
"banner" |
public static final java.lang.String |
FULLSCREEN |
"fullscreen" |
public static final java.lang.String |
NATIVE |
"native" |
public static final java.lang.String |
REWARDED |
"rewarded" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
STANDARD |
"standard" |
public static final java.lang.String |
VIDEO |
"video" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
AUCTION_FINISHED |
"auction_finished" |
public static final java.lang.String |
AUCTION_NEXT_ITEM |
"auction_next_item" |
public static final java.lang.String |
AUCTION_START |
"auction_start" |
public static final java.lang.String |
CACHE |
"cache" |
public static final java.lang.String |
CACHE_FAIL |
"cache_fail" |
public static final java.lang.String |
CLICK |
"click" |
public static final java.lang.String |
ERROR |
"error" |
public static final java.lang.String |
FILL |
"fill" |
public static final java.lang.String |
IMPRESSION |
"impression" |
public static final java.lang.String |
INTERSTITIAL_CLOSED |
"interstitial_closed" |
public static final java.lang.String |
LOAD |
"load" |
public static final java.lang.String |
LOAD_FAIL |
"load_fail" |
public static final java.lang.String |
NEXT_AD_SOURCE |
"next_ad_source" |
public static final java.lang.String |
NO_FILL |
"no_fill" |
public static final java.lang.String |
RENDER |
"render" |
public static final java.lang.String |
RENDER_ERROR |
"render_error" |
public static final java.lang.String |
REQUEST |
"request" |
public static final java.lang.String |
RESPONSE |
"response" |
public static final java.lang.String |
VIDEO_AD_BUFFER_FINISH |
"buffer_finish" |
public static final java.lang.String |
VIDEO_AD_BUFFER_START |
"buffer_start" |
public static final java.lang.String |
VIDEO_AD_CLICKED |
"clicked" |
public static final java.lang.String |
VIDEO_AD_COMPLETE |
"ad_complete" |
public static final java.lang.String |
VIDEO_AD_FIRST_QUARTILE |
"first_quartile" |
public static final java.lang.String |
VIDEO_AD_IMPRESSION |
"impression" |
public static final java.lang.String |
VIDEO_AD_MIDPOINT |
"midpoint" |
public static final java.lang.String |
VIDEO_AD_PAUSE |
"pause" |
public static final java.lang.String |
VIDEO_AD_RESUME |
"resume" |
public static final java.lang.String |
VIDEO_AD_SESSION_INITIALIZED |
"session_initialized" |
public static final java.lang.String |
VIDEO_AD_SESSION_LOADED |
"session_loaded" |
public static final java.lang.String |
VIDEO_AD_SESSION_STARTED |
"session_started" |
public static final java.lang.String |
VIDEO_AD_SESSION_STOPPED |
"session_stopped" |
public static final java.lang.String |
VIDEO_AD_SKIPPED |
"skipped" |
public static final java.lang.String |
VIDEO_AD_THIRD_QUARTILE |
"third_quartile" |
public static final java.lang.String |
VIDEO_AD_VOLUME_CHANGE |
"volume_change" |
public static final java.lang.String |
VIDEO_DISMISSED |
"video_dismissed" |
public static final java.lang.String |
VIDEO_FINISHED |
"video_finished" |
public static final java.lang.String |
VIDEO_MUTE |
"video_mute" |
public static final java.lang.String |
VIDEO_PAUSE |
"video_pause" |
public static final java.lang.String |
VIDEO_RESUME |
"video_resume" |
public static final java.lang.String |
VIDEO_STARTED |
"video_started" |
public static final java.lang.String |
VIDEO_UNMUTE |
"video_unmute" |
public static final java.lang.String |
WEB_AD_SESSION_INITIALIZED |
"web_ad_session_started" |
public static final java.lang.String |
WINNER |
"winner" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
AD_FORMAT |
"ad_format" |
public static final java.lang.String |
AD_REQUEST |
"ad_request" |
public static final java.lang.String |
AD_SIZE |
"ad_size" |
public static final java.lang.String |
AD_TYPE |
"ad_type" |
public static final java.lang.String |
APP_TOKEN |
"app_token" |
public static final java.lang.String |
BID_PRICE |
"bid_price" |
public static final java.lang.String |
CACHE_TIME |
"cache_time" |
public static final java.lang.String |
CAMPAIGN_ID |
"campaign_id" |
public static final java.lang.String |
CATEGORY_ID |
"category_id" |
public static final java.lang.String |
CREATIVE |
"creative" |
public static final java.lang.String |
CREATIVE_ID |
"creative_id" |
public static final java.lang.String |
CREATIVE_TYPE |
"creative_type" |
public static final java.lang.String |
ERROR_CODE |
"error_code" |
public static final java.lang.String |
ERROR_MESSAGE |
"error_message" |
public static final java.lang.String |
EVENT_TYPE |
"event_type" |
public static final java.lang.String |
INTEGRATION_TYPE |
"integration_type" |
public static final java.lang.String |
INTERSTITIAL |
"interstitial" |
public static final java.lang.String |
PARTICIPANTS |
"participants" |
public static final java.lang.String |
PLACEMENT_ID |
"placement_id" |
public static final java.lang.String |
REWARDED |
"rewarded" |
public static final java.lang.String |
TIMESTAMP |
"timestamp" |
public static final java.lang.String |
VAST |
"vast" |
public static final java.lang.String |
ZONE_ID |
"zone_id" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final boolean |
DEBUG_LOG_ENABLED |
false |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
RESULT_CONSENT_ACCEPTED |
200 |
public static final int |
RESULT_CONSENT_REJECTED |
201 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BROADCAST_ID |
"ad_sdk_broadcastId" |
public static final java.lang.String |
VIDEO_PROGRESS |
"ad_sdk_video_progress" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
EXTRA_BROADCAST_ID |
"extra_adsdk_broadcast_id" |
public static final java.lang.String |
EXTRA_SKIP_OFFSET |
"extra_adsdk_skip_offset" |
public static final java.lang.String |
EXTRA_ZONE_ID |
"extra_adsdk_zone_id" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
CLICK |
"click" |
public static final java.lang.String |
IMPRESSION |
"impression" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
ERROR |
"error" |
public static final java.lang.String |
OK |
"ok" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
MRAID_1 |
"3" |
public static final java.lang.String |
MRAID_2 |
"5" |
public static final java.lang.String |
MRAID_3 |
"6" |
public static final java.lang.String |
OMID_1 |
"7" |
public static final java.lang.String |
SIMID |
"8" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BANNER |
"banner" |
public static final java.lang.String |
CALL_TO_ACTION |
"cta" |
public static final java.lang.String |
DESCRIPTION |
"description" |
public static final java.lang.String |
HTML_BANNER |
"htmlbanner" |
public static final java.lang.String |
ICON |
"icon" |
public static final java.lang.String |
RATING |
"rating" |
public static final java.lang.String |
STANDARD_BANNER |
"standardbanner" |
public static final java.lang.String |
TITLE |
"title" |
public static final java.lang.String |
VAST |
"vast2" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
MRAID_1024x768 |
22 |
public static final int |
MRAID_160x600 |
25 |
public static final int |
MRAID_250x250 |
26 |
public static final int |
MRAID_300x250 |
8 |
public static final int |
MRAID_300x50 |
12 |
public static final int |
MRAID_300x600 |
27 |
public static final int |
MRAID_320x100 |
28 |
public static final int |
MRAID_320x480 |
21 |
public static final int |
MRAID_320x50 |
10 |
public static final int |
MRAID_480x320 |
29 |
public static final int |
MRAID_728x90 |
24 |
public static final int |
MRAID_768x1024 |
23 |
public static final int |
VAST_INTERSTITIAL |
15 |
public static final int |
VAST_MRECT |
4 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BUNDLE_ID |
"bundleid" |
public static final java.lang.String |
CAMPAIGN_ID |
"campaignid" |
public static final java.lang.String |
CONTENT_INFO |
"contentinfo" |
public static final java.lang.String |
CREATIVE_ID |
"creativeid" |
public static final java.lang.String |
POINTS |
"points" |
public static final java.lang.String |
REVENUE_MODEL |
"revenuemodel" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
VAST_1_0 |
"1" |
public static final java.lang.String |
VAST_1_0_WRAPPER |
"4" |
public static final java.lang.String |
VAST_2_0 |
"2" |
public static final java.lang.String |
VAST_2_0_WRAPPER |
"5" |
public static final java.lang.String |
VAST_3_0 |
"3" |
public static final java.lang.String |
VAST_3_0_WRAPPER |
"6" |
public static final java.lang.String |
VAST_4_0 |
"7" |
public static final java.lang.String |
VAST_4_0_WRAPPER |
"8" |
public static final java.lang.String |
VAST_4_1 |
"11" |
public static final java.lang.String |
VAST_4_1_WRAPPER |
"12" |
public static final java.lang.String |
VAST_4_2 |
"13" |
public static final java.lang.String |
VAST_4_2_WRAPPER |
"14" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BANNER |
"banner" |
public static final java.lang.String |
INTERSTITIAL |
"interstitial" |
public static final java.lang.String |
NATIVE |
"native" |
public static final java.lang.String |
REWARDED |
"rewarded" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
MRAID |
"mraid" |
public static final java.lang.String |
VAST |
"vast" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
AD_ERRORS |
"ad_errors" |
public static final java.lang.String |
AD_EVENTS |
"ad_events" |
public static final java.lang.String |
DIAGNOSTIC_INIT |
"diagnostic_init" |
public static final java.lang.String |
DIAGNOSTIC_PLACEMENT |
"diagnostic_placement" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
CCPA |
"ccpa" |
public static final java.lang.String |
GDPR |
"gdpr" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
mraidJS |
"Ly8KLy8gIG1yYWlkLmpzCi8vCgooZnVuY3Rpb24gKCkgewoKICAgIGNvbnNvbGUubG9nKCJNUkFJRCBvYmplY3QgbG9hZGluZy4uLiIpOwoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAqIGNvbnNvbGUgbG9nZ2luZyBoZWxwZXIKICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICB2YXIgTG9nTGV2ZWxFbnVtID0gewogICAgICAgICJERUJVRyI6IDAsCiAgICAgICAgIklORk8iOiAxLAogICAgICAgICJXQVJOSU5HIjogMiwKICAgICAgICAiRVJST1IiOiAzLAogICAgICAgICJOT05FIjogNAogICAgfTsKCiAgICB2YXIgbG9nTGV2ZWwgPSBMb2dMZXZlbEVudW0uREVCVUc7CiAgICB2YXIgbG9nID0ge307CgogICAgbG9nLmQgPSBmdW5jdGlvbiAobXNnKSB7CiAgICAgICAgaWYgKGxvZ0xldmVsIDw9IExvZ0xldmVsRW51bS5ERUJVRykgewogICAgICAgICAgICBjb25zb2xlLmxvZygiKEQtbXJhaWQuanMpICIgKyBtc2cpOwogICAgICAgIH0KICAgIH07CgogICAgbG9nLmkgPSBmdW5jdGlvbiAobXNnKSB7CiAgICAgICAgaWYgKGxvZ0xldmVsIDw9IExvZ0xldmVsRW51bS5JTkZPKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCIoSS1tcmFpZC5qcykgIiArIG1zZyk7CiAgICAgICAgfQogICAgfTsKCiAgICBsb2cudyA9IGZ1bmN0aW9uIChtc2cpIHsKICAgICAgICBpZiAobG9nTGV2ZWwgPD0gTG9nTGV2ZWxFbnVtLldBUk5JTkcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIihXLW1yYWlkLmpzKSAiICsgbXNnKTsKICAgICAgICB9CiAgICB9OwoKICAgIGxvZy5lID0gZnVuY3Rpb24gKG1zZykgewogICAgICAgIGlmIChsb2dMZXZlbCA8PSBMb2dMZXZlbEVudW0uRVJST1IpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIihFLW1yYWlkLmpzKSAiICsgbXNnKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAqIE1SQUlEIGRlY2xhcmF0aW9uCiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgdmFyIG1yYWlkID0gd2luZG93Lm1yYWlkID0ge307CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICogVlBBSUQgZGVjbGFyYXRpb24gKG9wdGlvbmFsKQogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgIHZhciB2cGFpZCA9IG51bGw7CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICogY29uc3RhbnRzCiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgdmFyIFZFUlNJT04gPSAiMy4wIjsKCiAgICB2YXIgU0RLID0gIkh5QmlkIjsKCiAgICB2YXIgU1RBVEVTID0gbXJhaWQuU1RBVEVTID0gewogICAgICAgICJMT0FESU5HIjogImxvYWRpbmciLAogICAgICAgICJERUZBVUxUIjogImRlZmF1bHQiLAogICAgICAgICJFWFBBTkRFRCI6ICJleHBhbmRlZCIsCiAgICAgICAgIlJFU0laRUQiOiAicmVzaXplZCIsCiAgICAgICAgIkhJRERFTiI6ICJoaWRkZW4iCiAgICB9OwoKICAgIHZhciBQTEFDRU1FTlRfVFlQRVMgPSBtcmFpZC5QTEFDRU1FTlRfVFlQRVMgPSB7CiAgICAgICAgIklOTElORSI6ICJpbmxpbmUiLAogICAgICAgICJJTlRFUlNUSVRJQUwiOiAiaW50ZXJzdGl0aWFsIgogICAgfTsKCiAgICB2YXIgUkVTSVpFX1BST1BFUlRJRVNfQ1VTVE9NX0NMT1NFX1BPU0lUSU9OID0gbXJhaWQuUkVTSVpFX1BST1BFUlRJRVNfQ1VTVE9NX0NMT1NFX1BPU0lUSU9OID0gewogICAgICAgICJUT1BfTEVGVCI6ICJ0b3AtbGVmdCIsCiAgICAgICAgIlRPUF9DRU5URVIiOiAidG9wLWNlbnRlciIsCiAgICAgICAgIlRPUF9SSUdIVCI6ICJ0b3AtcmlnaHQiLAogICAgICAgICJDRU5URVIiOiAiY2VudGVyIiwKICAgICAgICAiQk9UVE9NX0xFRlQiOiAiYm90dG9tLWxlZnQiLAogICAgICAgICJCT1RUT01fQ0VOVEVSIjogImJvdHRvbS1jZW50ZXIiLAogICAgICAgICJCT1RUT01fUklHSFQiOiAiYm90dG9tLXJpZ2h0IgogICAgfTsKCiAgICB2YXIgT1JJRU5UQVRJT05fUFJPUEVSVElFU19GT1JDRV9PUklFTlRBVElPTiA9IG1yYWlkLk9SSUVOVEFUSU9OX1BST1BFUlRJRVNfRk9SQ0VfT1JJRU5UQVRJT04gPSB7CiAgICAgICAgIlBPUlRSQUlUIjogInBvcnRyYWl0IiwKICAgICAgICAiTEFORFNDQVBFIjogImxhbmRzY2FwZSIsCiAgICAgICAgIk5PTkUiOiAibm9uZSIKICAgIH07CgogICAgdmFyIEVWRU5UUyA9IG1yYWlkLkVWRU5UUyA9IHsKICAgICAgICAiRVJST1IiOiAiZXJyb3IiLAogICAgICAgICJSRUFEWSI6ICJyZWFkeSIsCiAgICAgICAgIlNJWkVDSEFOR0UiOiAic2l6ZUNoYW5nZSIsCiAgICAgICAgIlNUQVRFQ0hBTkdFIjogInN0YXRlQ2hhbmdlIiwKICAgICAgICAiRVhQT1NVUkVDSEFOR0UiOiAiZXhwb3N1cmVDaGFuZ2UiLAogICAgICAgICJBVURJT1ZPTFVNRUNIQU5HRSI6ICJhdWRpb1ZvbHVtZUNoYW5nZSIsCiAgICAgICAgIlZJRVdBQkxFQ0hBTkdFIjogInZpZXdhYmxlQ2hhbmdlIgogICAgfTsKCiAgICB2YXIgU1VQUE9SVEVEX0ZFQVRVUkVTID0gbXJhaWQuU1VQUE9SVEVEX0ZFQVRVUkVTID0gewogICAgICAgICJTTVMiOiAic21zIiwKICAgICAgICAiVEVMIjogInRlbCIsCiAgICAgICAgIkNBTEVOREFSIjogImNhbGVuZGFyIiwKICAgICAgICAiU1RPUkVQSUNUVVJFIjogInN0b3JlUGljdHVyZSIsCiAgICAgICAgIklOTElORVZJREVPIjogImlubGluZVZpZGVvIiwKICAgICAgICAiVlBBSUQiOiAidnBhaWQiLAogICAgICAgICJMT0NBVElPTiI6ICJsb2NhdGlvbiIKICAgIH07CgogICAgdmFyIExPQ0FUSU9OX1NPVVJDRVMgPSBtcmFpZC5MT0NBVElPTl9TT1VSQ0VTID0gewogICAgICAgICJHUFMiOiAxLAogICAgICAgICJJUCI6IDIsCiAgICAgICAgIlVTRVJfUFJPVklERUQiOiAzCiAgICB9CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICogc3RhdGUKICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICB2YXIgc3RhdGUgPSBTVEFURVMuTE9BRElORzsKICAgIHZhciBwbGFjZW1lbnRUeXBlID0gUExBQ0VNRU5UX1RZUEVTLklOTElORTsKICAgIHZhciBzdXBwb3J0ZWRGZWF0dXJlcyA9IHt9OwogICAgdmFyIGlzVmlld2FibGUgPSBmYWxzZTsKICAgIHZhciBpc0V4cGFuZFByb3BlcnRpZXNTZXQgPSBmYWxzZTsKICAgIHZhciBpc1Jlc2l6ZVJlYWR5ID0gZmFsc2U7CgogICAgdmFyIGV4cG9zdXJlID0gewogICAgICAgICJleHBvc2VkUGVyY2VudGFnZSI6IDAuMCwKICAgICAgICAidmlzaWJsZVJlY3RhbmdsZSI6IHsKICAgICAgICAgICAgIngiOiAwLAogICAgICAgICAgICAieSI6IDAsCiAgICAgICAgICAgICJ3aWR0aCI6IDAsCiAgICAgICAgICAgICJoZWlnaHQiOiAwCiAgICAgICAgfSwKICAgICAgICAib2NjbHVzaW9uUmVjdGFuZ2xlcyI6IG51bGwKICAgIH0KCiAgICB2YXIgdm9sdW1lUGVyY2VudGFnZSA9IDAuMDsKCgogICAgdmFyIGV4cGFuZFByb3BlcnRpZXMgPSB7CiAgICAgICAgIndpZHRoIjogMCwKICAgICAgICAiaGVpZ2h0IjogMCwKICAgICAgICAidXNlQ3VzdG9tQ2xvc2UiOiBmYWxzZSwKICAgICAgICAiaXNNb2RhbCI6IHRydWUKICAgIH07CgogICAgdmFyIG9yaWVudGF0aW9uUHJvcGVydGllcyA9IHsKICAgICAgICAiYWxsb3dPcmllbnRhdGlvbkNoYW5nZSI6IHRydWUsCiAgICAgICAgImZvcmNlT3JpZW50YXRpb24iOiBPUklFTlRBVElPTl9QUk9QRVJUSUVTX0ZPUkNFX09SSUVOVEFUSU9OLk5PTkUKICAgIH07CgogICAgdmFyIGN1cnJlbnRBcHBPcmllbnRhdGlvbiA9IHsKICAgICAgICAib3JpZW50YXRpb24iOiBPUklFTlRBVElPTl9QUk9QRVJUSUVTX0ZPUkNFX09SSUVOVEFUSU9OLlBPUlRSQUlULAogICAgICAgICJsb2NrZWQiOiBmYWxzZQogICAgfTsKCiAgICB2YXIgcmVzaXplUHJvcGVydGllcyA9IHsKICAgICAgICAid2lkdGgiOiAwLAogICAgICAgICJoZWlnaHQiOiAwLAogICAgICAgICJjdXN0b21DbG9zZVBvc2l0aW9uIjogUkVTSVpFX1BST1BFUlRJRVNfQ1VTVE9NX0NMT1NFX1BPU0lUSU9OLlRPUF9SSUdIVCwKICAgICAgICAib2Zmc2V0WCI6IDAsCiAgICAgICAgIm9mZnNldFkiOiAwLAogICAgICAgICJhbGxvd09mZnNjcmVlbiI6IHRydWUKICAgIH07CgogICAgdmFyIGN1cnJlbnRQb3NpdGlvbiA9IHsKICAgICAgICAieCI6IDAsCiAgICAgICAgInkiOiAwLAogICAgICAgICJ3aWR0aCI6IDAsCiAgICAgICAgImhlaWdodCI6IDAKICAgIH07CgogICAgdmFyIGRlZmF1bHRQb3NpdGlvbiA9IHsKICAgICAgICAieCI6IDAsCiAgICAgICAgInkiOiAwLAogICAgICAgICJ3aWR0aCI6IDAsCiAgICAgICAgImhlaWdodCI6IDAKICAgIH07CgogICAgdmFyIG1heFNpemUgPSB7CiAgICAgICAgIndpZHRoIjogMCwKICAgICAgICAiaGVpZ2h0IjogMAogICAgfTsKCiAgICB2YXIgc2NyZWVuU2l6ZSA9IHsKICAgICAgICAid2lkdGgiOiAwLAogICAgICAgICJoZWlnaHQiOiAwCiAgICB9OwoKICAgIHZhciBsb2NhdGlvbiA9IHsKICAgICAgICAibGF0IjogLTEsCiAgICAgICAgImxvbiI6IC0xLAogICAgICAgICJ0eXBlIjogTE9DQVRJT05fU09VUkNFUy5HUFMsCiAgICAgICAgImFjY3VyYWN5IjogLTEsCiAgICAgICAgImxhc3RmaXgiOiAtMSwKICAgICAgICAiaXBzZXJ2aWNlIjogIm5vbmUiCiAgICB9CgogICAgdmFyIGxpc3RlbmVycyA9IHt9OwogICAgd2luZG93Lmxpc3RlbmVycyA9IGxpc3RlbmVyczsKCiAgICB2YXIgbXJhaWRFbnYgPSB7CiAgICAgICAgInZlcnNpb24iOiBWRVJTSU9OLAogICAgICAgICJzZGsiOiBTREssCiAgICAgICAgInNka1ZlcnNpb24iOiBudWxsLAogICAgICAgICJhcHBJZCI6IG51bGwsCiAgICAgICAgImlmYSI6IG51bGwsCiAgICAgICAgImxpbWl0QWRUcmFja2luZyI6IGZhbHNlLAogICAgICAgICJjb3BwYSI6IGZhbHNlCiAgICB9OwoKICAgIHdpbmRvdy5NUkFJRF9FTlYgPSBtcmFpZEVudjsKCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgKiAib2ZmaWNpYWwiIEFQSTogbWV0aG9kcyBjYWxsZWQgYnkgY3JlYXRpdmUKICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICBtcmFpZC5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICAgIGxvZy5pKCJtcmFpZC5hZGRFdmVudExpc3RlbmVyICIgKyBldmVudCArICI6ICIgKyBTdHJpbmcobGlzdGVuZXIpKTsKICAgICAgICBpZiAoIWV2ZW50IHx8ICFsaXN0ZW5lcikgewogICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgiQm90aCBldmVudCBhbmQgbGlzdGVuZXIgYXJlIHJlcXVpcmVkLiIsICJhZGRFdmVudExpc3RlbmVyIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFjb250YWlucyhldmVudCwgRVZFTlRTKSkgewogICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgiVW5rbm93biBNUkFJRCBldmVudDogIiArIGV2ZW50LCAiYWRkRXZlbnRMaXN0ZW5lciIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBsaXN0ZW5lcnNGb3JFdmVudCA9IGxpc3RlbmVyc1tldmVudF0gPSBsaXN0ZW5lcnNbZXZlbnRdIHx8IFtdOwogICAgICAgIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsaXN0ZW5lciBpc24ndCBhbHJlYWR5IHJlZ2lzdGVyZWQKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVyc0ZvckV2ZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzdHIxID0gU3RyaW5nKGxpc3RlbmVyKTsKICAgICAgICAgICAgdmFyIHN0cjIgPSBTdHJpbmcobGlzdGVuZXJzRm9yRXZlbnRbaV0pOwogICAgICAgICAgICBpZiAobGlzdGVuZXIgPT09IGxpc3RlbmVyc0ZvckV2ZW50W2ldIHx8IHN0cjEgPT09IHN0cjIpIHsKICAgICAgICAgICAgICAgIGxvZy5pKCJsaXN0ZW5lciAiICsgc3RyMSArICIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBldmVudCAiICsgZXZlbnQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyc0ZvckV2ZW50LnB1c2gobGlzdGVuZXIpOwogICAgfTsKCiAgICBtcmFpZC5jcmVhdGVDYWxlbmRhckV2ZW50ID0gZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHsKICAgICAgICBsb2cuaSgibXJhaWQuY3JlYXRlQ2FsZW5kYXJFdmVudCB3aXRoICIgKyBwYXJhbWV0ZXJzKTsKICAgICAgICBpZiAoc3VwcG9ydGVkRmVhdHVyZXNbbXJhaWQuU1VQUE9SVEVEX0ZFQVRVUkVTLkNBTEVOREFSXSkgewogICAgICAgICAgICBjYWxsTmF0aXZlKCJjcmVhdGVDYWxlbmRhckV2ZW50P2V2ZW50SlNPTj0iICsgSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxvZy5lKCJjcmVhdGVDYWxlbmRhckV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLmNsb3NlID0gZnVuY3Rpb24gKCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5jbG9zZSIpOwogICAgICAgIGlmIChzdGF0ZSA9PT0gU1RBVEVTLkxPQURJTkcKICAgICAgICAgICAgfHwgKHN0YXRlID09PSBTVEFURVMuREVGQVVMVCAmJiBwbGFjZW1lbnRUeXBlID09PSBQTEFDRU1FTlRfVFlQRVMuSU5MSU5FKQogICAgICAgICAgICB8fCBzdGF0ZSA9PT0gU1RBVEVTLkhJRERFTikgewogICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2FsbE5hdGl2ZSgiY2xvc2UiKTsKICAgIH07CgogICAgbXJhaWQuZXhwYW5kID0gZnVuY3Rpb24gKHVybCkgewogICAgICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBsb2cuaSgibXJhaWQuZXhwYW5kICgxLXBhcnQpIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nLmkoIm1yYWlkLmV4cGFuZCAiICsgdXJsKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhlIG9ubHkgdGltZSBpdCBpcyB2YWxpZCB0byBjYWxsIGV4cGFuZCBpcyB3aGVuIHRoZSBhZCBpcwogICAgICAgIC8vIGEgYmFubmVyIGN1cnJlbnRseSBpbiBlaXRoZXIgZGVmYXVsdCBvciByZXNpemVkIHN0YXRlLgogICAgICAgIGlmIChwbGFjZW1lbnRUeXBlICE9PSBQTEFDRU1FTlRfVFlQRVMuSU5MSU5FCiAgICAgICAgICAgIHx8IChzdGF0ZSAhPT0gU1RBVEVTLkRFRkFVTFQgJiYgc3RhdGUgIT09IFNUQVRFUy5SRVNJWkVEKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh1cmwgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjYWxsTmF0aXZlKCJleHBhbmQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjYWxsTmF0aXZlKCJleHBhbmQ/dXJsPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBtcmFpZC5nZXRDdXJyZW50UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmdldEN1cnJlbnRQb3NpdGlvbiIpOwogICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CiAgICB9OwoKICAgIG1yYWlkLmdldERlZmF1bHRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZ2V0RGVmYXVsdFBvc2l0aW9uIik7CiAgICAgICAgcmV0dXJuIGRlZmF1bHRQb3NpdGlvbjsKICAgIH07CgogICAgbXJhaWQuZ2V0RXhwYW5kUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZ2V0RXhwYW5kUHJvcGVydGllcyIpOwogICAgICAgIHJldHVybiBleHBhbmRQcm9wZXJ0aWVzOwogICAgfTsKCiAgICBtcmFpZC5nZXRNYXhTaXplID0gZnVuY3Rpb24gKCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5nZXRNYXhTaXplIik7CiAgICAgICAgcmV0dXJuIG1heFNpemU7CiAgICB9OwoKICAgIG1yYWlkLmdldE9yaWVudGF0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZ2V0T3JpZW50YXRpb25Qcm9wZXJ0aWVzIik7CiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uUHJvcGVydGllczsKICAgIH07CgogICAgbXJhaWQuZ2V0Q3VycmVudEFwcE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5nZXRDdXJyZW50QXBwT3JpZW50YXRpb24iKTsKICAgICAgICByZXR1cm4gY3VycmVudEFwcE9yaWVudGF0aW9uOwogICAgfTsKCiAgICBtcmFpZC5nZXRQbGFjZW1lbnRUeXBlID0gZnVuY3Rpb24gKCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5nZXRQbGFjZW1lbnRUeXBlIik7CiAgICAgICAgcmV0dXJuIHBsYWNlbWVudFR5cGU7CiAgICB9OwoKICAgIG1yYWlkLmdldFJlc2l6ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmdldFJlc2l6ZVByb3BlcnRpZXMiKTsKICAgICAgICByZXR1cm4gcmVzaXplUHJvcGVydGllczsKICAgIH07CgogICAgbXJhaWQuZ2V0U2NyZWVuU2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZ2V0U2NyZWVuU2l6ZSIpOwogICAgICAgIHJldHVybiBzY3JlZW5TaXplOwogICAgfTsKCiAgICBtcmFpZC5nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZ2V0U3RhdGUiKTsKICAgICAgICByZXR1cm4gc3RhdGU7CiAgICB9OwoKICAgIG1yYWlkLmdldFZlcnNpb24gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmdldFZlcnNpb24iKTsKICAgICAgICByZXR1cm4gVkVSU0lPTjsKICAgIH07CgogICAgbXJhaWQuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmdldExvY2F0aW9uIik7CiAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwogICAgfTsKCiAgICBtcmFpZC5pc1ZpZXdhYmxlID0gZnVuY3Rpb24gKCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5pc1ZpZXdhYmxlIik7CiAgICAgICAgcmV0dXJuIGlzVmlld2FibGU7CiAgICB9OwoKICAgIG1yYWlkLm9wZW4gPSBmdW5jdGlvbiAodXJsKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLm9wZW4gIiArIHVybCk7CiAgICAgICAgY2FsbE5hdGl2ZSgib3Blbj91cmw9IiArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpKTsKICAgIH07CgogICAgbXJhaWQucGxheVZpZGVvID0gZnVuY3Rpb24gKHVybCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5wbGF5VmlkZW8gIiArIHVybCk7CiAgICAgICAgY2FsbE5hdGl2ZSgicGxheVZpZGVvP3VybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpOwogICAgfTsKCiAgICBtcmFpZC5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICAgIGxvZy5pKCJtcmFpZC5yZW1vdmVFdmVudExpc3RlbmVyICIgKyBldmVudCArICIgOiAiICsgU3RyaW5nKGxpc3RlbmVyKSk7CiAgICAgICAgaWYgKCFldmVudCkgewogICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgiRXZlbnQgaXMgcmVxdWlyZWQuIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIWNvbnRhaW5zKGV2ZW50LCBFVkVOVFMpKSB7CiAgICAgICAgICAgIG1yYWlkLmZpcmVFcnJvckV2ZW50KCJVbmtub3duIE1SQUlEIGV2ZW50OiAiICsgZXZlbnQsICJyZW1vdmVFdmVudExpc3RlbmVyIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHsKICAgICAgICAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJzRm9yRXZlbnQgPSBsaXN0ZW5lcnNbZXZlbnRdOwogICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdGhlIGdpdmVuIGxpc3RlbmVyCiAgICAgICAgICAgICAgICB2YXIgbGVuID0gbGlzdGVuZXJzRm9yRXZlbnQubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciByZWdpc3RlcmVkTGlzdGVuZXIgPSBsaXN0ZW5lcnNGb3JFdmVudFtpXTsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RyMSA9IFN0cmluZyhsaXN0ZW5lcik7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cjIgPSBTdHJpbmcocmVnaXN0ZXJlZExpc3RlbmVyKTsKICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgPT09IHJlZ2lzdGVyZWRMaXN0ZW5lciB8fCBzdHIxID09PSBzdHIyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyc0ZvckV2ZW50LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGkgPT09IGxlbikgewogICAgICAgICAgICAgICAgICAgIGxvZy5pKCJsaXN0ZW5lciAiICsgc3RyMSArICIgbm90IGZvdW5kIGZvciBldmVudCAiICsgZXZlbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc0ZvckV2ZW50Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsaXN0ZW5lcnNbZXZlbnRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gbm8gbGlzdGVuZXIgdG8gcmVtb3ZlIHdhcyBwcm92aWRlZCwgc28gcmVtb3ZlIGFsbCBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgIC8vIGZvciBnaXZlbiBldmVudAogICAgICAgICAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1tldmVudF07CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2cuaSgibm8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGV2ZW50ICIgKyBldmVudCk7CiAgICAgICAgfQogICAgfTsKCiAgICBtcmFpZC5yZXNpemUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLnJlc2l6ZSIpOwogICAgICAgIC8vIFRoZSBvbmx5IHRpbWUgaXQgaXMgdmFsaWQgdG8gY2FsbCByZXNpemUgaXMgd2hlbiB0aGUgYWQgaXMKICAgICAgICAvLyBhIGJhbm5lciBjdXJyZW50bHkgaW4gZWl0aGVyIGRlZmF1bHQgb3IgcmVzaXplZCBzdGF0ZS4KICAgICAgICAvLyBUcmlnZ2VyIGFuIGVycm9yIGlmIHRoZSBjdXJyZW50IHN0YXRlIGlzIGV4cGFuZGVkLgogICAgICAgIGlmIChwbGFjZW1lbnRUeXBlID09PSBQTEFDRU1FTlRfVFlQRVMuSU5URVJTVElUSUFMIHx8IHN0YXRlID09PSBTVEFURVMuTE9BRElORyB8fCBzdGF0ZSA9PT0gU1RBVEVTLkhJRERFTikgewogICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURVMuRVhQQU5ERUQpIHsKICAgICAgICAgICAgbXJhaWQuZmlyZUVycm9yRXZlbnQoIm1yYWlkLnJlc2l6ZSBjYWxsZWQgd2hlbiBhZCBpcyBpbiBleHBhbmRlZCBzdGF0ZSIsICJtcmFpZC5yZXNpemUiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzUmVzaXplUmVhZHkpIHsKICAgICAgICAgICAgbXJhaWQuZmlyZUVycm9yRXZlbnQoIm1yYWlkLnJlc2l6ZSBpcyBub3QgcmVhZHkgdG8gYmUgY2FsbGVkIiwgIm1yYWlkLnJlc2l6ZSIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNhbGxOYXRpdmUoInJlc2l6ZSIpOwogICAgfTsKCiAgICBtcmFpZC5zZXRFeHBhbmRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0RXhwYW5kUHJvcGVydGllcyIpOwoKICAgICAgICBpZiAoIXZhbGlkYXRlKHByb3BlcnRpZXMsICJzZXRFeHBhbmRQcm9wZXJ0aWVzIikpIHsKICAgICAgICAgICAgbG9nLmUoImZhaWxlZCB2YWxpZGF0aW9uIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBvbGRVc2VDdXN0b21DbG9zZSA9IGV4cGFuZFByb3BlcnRpZXMudXNlQ3VzdG9tQ2xvc2U7CgogICAgICAgIC8vIGV4cGFuZFByb3BlcnRpZXMgY29udGFpbnMgMyByZWFkLXdyaXRlIHByb3BlcnRpZXM6IHdpZHRoLCBoZWlnaHQsIGFuZCB1c2VDdXN0b21DbG9zZTsKICAgICAgICAvLyB0aGUgaXNNb2RhbCBwcm9wZXJ0eSBpcyByZWFkLW9ubHkKICAgICAgICB2YXIgcndQcm9wcyA9IFsid2lkdGgiLCAiaGVpZ2h0IiwgInVzZUN1c3RvbUNsb3NlIl07CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByd1Byb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwcm9wbmFtZSA9IHJ3UHJvcHNbaV07CiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BuYW1lKSkgewogICAgICAgICAgICAgICAgZXhwYW5kUHJvcGVydGllc1twcm9wbmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSW4gTVJBSUQgdjIuMCwgYWxsIGV4cGFuZGVkIGFkcyBieSBkZWZpbml0aW9uIGNvdmVyIHRoZSBlbnRpcmUgc2NyZWVuLAogICAgICAgIC8vIHNvIHRoZSBvbmx5IHByb3BlcnR5IHRoYXQgdGhlIG5hdGl2ZSBzaWRlIGhhcyB0byBrbm93IGFib3V0IGlzIHVzZUN1c3RvbUNsb3NlLgogICAgICAgIC8vIChUaGF0IGlzLCB0aGUgd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzIGFyZSBub3QgbmVlZGVkIGJ5IHRoZSBuYXRpdmUgY29kZS4pCiAgICAgICAgaWYgKGV4cGFuZFByb3BlcnRpZXMudXNlQ3VzdG9tQ2xvc2UgIT09IG9sZFVzZUN1c3RvbUNsb3NlKSB7CiAgICAgICAgICAgIGNhbGxOYXRpdmUoInVzZUN1c3RvbUNsb3NlP3VzZUN1c3RvbUNsb3NlPSIgKyBleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlKTsKICAgICAgICB9CgogICAgICAgIGlzRXhwYW5kUHJvcGVydGllc1NldCA9IHRydWU7CiAgICB9OwoKICAgIG1yYWlkLnNldE9yaWVudGF0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLnNldE9yaWVudGF0aW9uUHJvcGVydGllcyIpOwoKICAgICAgICBpZiAoIXZhbGlkYXRlKHByb3BlcnRpZXMsICJzZXRPcmllbnRhdGlvblByb3BlcnRpZXMiKSkgewogICAgICAgICAgICBsb2cuZSgiZmFpbGVkIHZhbGlkYXRpb24iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIG5ld09yaWVudGF0aW9uUHJvcGVydGllcyA9IHt9OwogICAgICAgIG5ld09yaWVudGF0aW9uUHJvcGVydGllcy5hbGxvd09yaWVudGF0aW9uQ2hhbmdlID0gb3JpZW50YXRpb25Qcm9wZXJ0aWVzLmFsbG93T3JpZW50YXRpb25DaGFuZ2UsCiAgICAgICAgICAgIG5ld09yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb25Qcm9wZXJ0aWVzLmZvcmNlT3JpZW50YXRpb247CgogICAgICAgIC8vIG9yaWVudGF0aW9uUHJvcGVydGllcyBjb250YWlucyAyIHJlYWQtd3JpdGUgcHJvcGVydGllczoKICAgICAgICAvLyBhbGxvd09yaWVudGF0aW9uQ2hhbmdlIGFuZCBmb3JjZU9yaWVudGF0aW9uCiAgICAgICAgdmFyIHJ3UHJvcHMgPSBbImFsbG93T3JpZW50YXRpb25DaGFuZ2UiLCAiZm9yY2VPcmllbnRhdGlvbiJdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcndQcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcHJvcG5hbWUgPSByd1Byb3BzW2ldOwogICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wbmFtZSkpIHsKICAgICAgICAgICAgICAgIG5ld09yaWVudGF0aW9uUHJvcGVydGllc1twcm9wbmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2V0dGluZyBhbGxvd09yaWVudGF0aW9uQ2hhbmdlIHRvIHRydWUgd2hpbGUgc2V0dGluZyBmb3JjZU9yaWVudGF0aW9uCiAgICAgICAgLy8gdG8gZWl0aGVyIHBvcnRyYWl0IG9yIGxhbmRzY2FwZQogICAgICAgIC8vIGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IgY29uZGl0aW9uLgogICAgICAgIGlmIChuZXdPcmllbnRhdGlvblByb3BlcnRpZXMuYWxsb3dPcmllbnRhdGlvbkNoYW5nZQogICAgICAgICAgICAmJiBuZXdPcmllbnRhdGlvblByb3BlcnRpZXMuZm9yY2VPcmllbnRhdGlvbiAhPT0gbXJhaWQuT1JJRU5UQVRJT05fUFJPUEVSVElFU19GT1JDRV9PUklFTlRBVElPTi5OT05FKSB7CiAgICAgICAgICAgIG1yYWlkLmZpcmVFcnJvckV2ZW50KAogICAgICAgICAgICAgICAgImFsbG93T3JpZW50YXRpb25DaGFuZ2UgaXMgdHJ1ZSBidXQgZm9yY2VPcmllbnRhdGlvbiBpcyAiCiAgICAgICAgICAgICAgICArIG5ld09yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9uLAogICAgICAgICAgICAgICAgInNldE9yaWVudGF0aW9uUHJvcGVydGllcyIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBvcmllbnRhdGlvblByb3BlcnRpZXMuYWxsb3dPcmllbnRhdGlvbkNoYW5nZSA9IG5ld09yaWVudGF0aW9uUHJvcGVydGllcy5hbGxvd09yaWVudGF0aW9uQ2hhbmdlOwogICAgICAgIG9yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9uID0gbmV3T3JpZW50YXRpb25Qcm9wZXJ0aWVzLmZvcmNlT3JpZW50YXRpb247CgogICAgICAgIHZhciBwYXJhbXMgPSAiYWxsb3dPcmllbnRhdGlvbkNoYW5nZT0iCiAgICAgICAgICAgICsgb3JpZW50YXRpb25Qcm9wZXJ0aWVzLmFsbG93T3JpZW50YXRpb25DaGFuZ2UKICAgICAgICAgICAgKyAiJmZvcmNlT3JpZW50YXRpb249IiArIG9yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9uOwoKICAgICAgICBjYWxsTmF0aXZlKCJzZXRPcmllbnRhdGlvblByb3BlcnRpZXM/IiArIHBhcmFtcyk7CiAgICB9OwoKICAgIG1yYWlkLnNldFJlc2l6ZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAocHJvcGVydGllcykgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRSZXNpemVQcm9wZXJ0aWVzIik7CgogICAgICAgIGlzUmVzaXplUmVhZHkgPSBmYWxzZTsKCiAgICAgICAgLy8gcmVzaXplUHJvcGVydGllcyBjb250YWlucyA2IHJlYWQtd3JpdGUgcHJvcGVydGllczoKICAgICAgICAvLyB3aWR0aCwgaGVpZ2h0LCBvZmZzZXRYLCBvZmZzZXRZLCBjdXN0b21DbG9zZVBvc2l0aW9uLCBhbGxvd09mZnNjcmVlbgoKICAgICAgICAvLyBUaGUgcHJvcGVydGllcyBvYmplY3QgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiBtdXN0IGNvbnRhaW4gd2lkdGgsIGhlaWdodCwgb2Zmc2V0WCwgb2Zmc2V0WS4KICAgICAgICAvLyBUaGUgcmVtYWluaW5nIHR3byBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4KICAgICAgICB2YXIgcmVxdWlyZWRQcm9wcyA9IFsid2lkdGgiLCAiaGVpZ2h0IiwgIm9mZnNldFgiLCAib2Zmc2V0WSJdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVxdWlyZWRQcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcHJvcG5hbWUgPSByZXF1aXJlZFByb3BzW2ldOwogICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcG5hbWUpKSB7CiAgICAgICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQgcHJvcGVydHkgIiArIHByb3BuYW1lICsgIiBpcyBtaXNzaW5nIiwKICAgICAgICAgICAgICAgICAgICAibXJhaWQuc2V0UmVzaXplUHJvcGVydGllcyIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXZhbGlkYXRlKHByb3BlcnRpZXMsICJzZXRSZXNpemVQcm9wZXJ0aWVzIikpIHsKICAgICAgICAgICAgbXJhaWQuZmlyZUVycm9yRXZlbnQoImZhaWxlZCB2YWxpZGF0aW9uIiwgIm1yYWlkLnNldFJlc2l6ZVByb3BlcnRpZXMiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGFkanVzdG1lbnRzID0geyJ4IjogMCwgInkiOiAwfTsKCiAgICAgICAgdmFyIGFsbG93T2Zmc2NyZWVuID0gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgiYWxsb3dPZmZzY3JlZW4iKSA/IHByb3BlcnRpZXMuYWxsb3dPZmZzY3JlZW4gOiByZXNpemVQcm9wZXJ0aWVzLmFsbG93T2Zmc2NyZWVuOwogICAgICAgIGlmICghYWxsb3dPZmZzY3JlZW4pIHsKICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMud2lkdGggPiBtYXhTaXplLndpZHRoIHx8IHByb3BlcnRpZXMuaGVpZ2h0ID4gbWF4U2l6ZS5oZWlnaHQpIHsKICAgICAgICAgICAgICAgIG1yYWlkLmZpcmVFcnJvckV2ZW50KCJyZXNpemUgd2lkdGggb3IgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4U2l6ZSB3aWR0aCBvciBoZWlnaHQiLCAibXJhaWQuc2V0UmVzaXplUHJvcGVydGllcyIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFkanVzdG1lbnRzID0gZml0UmVzaXplVmlld09uU2NyZWVuKHByb3BlcnRpZXMpOwogICAgICAgIH0gZWxzZSBpZiAoIWlzQ2xvc2VSZWdpb25PblNjcmVlbihwcm9wZXJ0aWVzKSkgewogICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgiY2xvc2UgZXZlbnQgcmVnaW9uIHdpbGwgbm90IGFwcGVhciBlbnRpcmVseSBvbnNjcmVlbiIsICJtcmFpZC5zZXRSZXNpemVQcm9wZXJ0aWVzIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciByd1Byb3BzID0gWyJ3aWR0aCIsICJoZWlnaHQiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgImN1c3RvbUNsb3NlUG9zaXRpb24iLCAiYWxsb3dPZmZzY3JlZW4iXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ3UHJvcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHByb3BuYW1lID0gcndQcm9wc1tpXTsKICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcG5hbWUpKSB7CiAgICAgICAgICAgICAgICByZXNpemVQcm9wZXJ0aWVzW3Byb3BuYW1lXSA9IHByb3BlcnRpZXNbcHJvcG5hbWVdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgcGFyYW1zID0KICAgICAgICAgICAgIndpZHRoPSIgKyByZXNpemVQcm9wZXJ0aWVzLndpZHRoICsKICAgICAgICAgICAgIiZoZWlnaHQ9IiArIHJlc2l6ZVByb3BlcnRpZXMuaGVpZ2h0ICsKICAgICAgICAgICAgIiZvZmZzZXRYPSIgKyAocmVzaXplUHJvcGVydGllcy5vZmZzZXRYICsgYWRqdXN0bWVudHMueCkgKwogICAgICAgICAgICAiJm9mZnNldFk9IiArIChyZXNpemVQcm9wZXJ0aWVzLm9mZnNldFkgKyBhZGp1c3RtZW50cy55KSArCiAgICAgICAgICAgICImY3VzdG9tQ2xvc2VQb3NpdGlvbj0iICsgcmVzaXplUHJvcGVydGllcy5jdXN0b21DbG9zZVBvc2l0aW9uICsKICAgICAgICAgICAgIiZhbGxvd09mZnNjcmVlbj0iICsgcmVzaXplUHJvcGVydGllcy5hbGxvd09mZnNjcmVlbjsKCiAgICAgICAgY2FsbE5hdGl2ZSgic2V0UmVzaXplUHJvcGVydGllcz8iICsgcGFyYW1zKTsKCiAgICAgICAgaXNSZXNpemVSZWFkeSA9IHRydWU7CiAgICB9OwoKICAgIG1yYWlkLnN0b3JlUGljdHVyZSA9IGZ1bmN0aW9uICh1cmwpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc3RvcmVQaWN0dXJlICIgKyB1cmwpOwogICAgICAgIGlmIChzdXBwb3J0ZWRGZWF0dXJlc1ttcmFpZC5TVVBQT1JURURfRkVBVFVSRVMuU1RPUkVQSUNUVVJFXSkgewogICAgICAgICAgICBjYWxsTmF0aXZlKCJzdG9yZVBpY3R1cmU/dXJsPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nLmUoInN0b3JlUGljdHVyZSBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQogICAgfTsKCiAgICBtcmFpZC5zdXBwb3J0cyA9IGZ1bmN0aW9uIChmZWF0dXJlKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLnN1cHBvcnRzICIgKyBmZWF0dXJlICsgIiAiICsgc3VwcG9ydGVkRmVhdHVyZXNbZmVhdHVyZV0pOwogICAgICAgIHZhciByZXR2YWwgPSBzdXBwb3J0ZWRGZWF0dXJlc1tmZWF0dXJlXTsKICAgICAgICBpZiAodHlwZW9mIHJldHZhbCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgcmV0dmFsID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR2YWw7CiAgICB9OwoKCiAgICBtcmFpZC51c2VDdXN0b21DbG9zZSA9IGZ1bmN0aW9uIChpc0N1c3RvbUNsb3NlKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLnVzZUN1c3RvbUNsb3NlICIgKyBpc0N1c3RvbUNsb3NlKTsKICAgICAgICBpZiAoZXhwYW5kUHJvcGVydGllcy51c2VDdXN0b21DbG9zZSAhPT0gaXNDdXN0b21DbG9zZSkgewogICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlID0gaXNDdXN0b21DbG9zZTsKICAgICAgICAgICAgY2FsbE5hdGl2ZSgidXNlQ3VzdG9tQ2xvc2U/dXNlQ3VzdG9tQ2xvc2U9IgogICAgICAgICAgICAgICAgKyBleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlKTsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLnVubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgIH07CgogICAgbXJhaWQuaW5pdFZwYWlkID0gZnVuY3Rpb24gKHZwYWlkT2JqZWN0KSB7CiAgICAgICAgdnBhaWQgPSB2cGFpZE9iamVjdDsKICAgIH07CgogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICogaGVscGVyIG1ldGhvZHMgY2FsbGVkIGJ5IFNESwogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgIC8vIHNldHRlcnMgdG8gY2hhbmdlIHN0YXRlCiAgICBtcmFpZC5zZXRDdXJyZW50UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRDdXJyZW50UG9zaXRpb24gIiArIHggKyAiLCIgKyB5ICsgIiwiICsgd2lkdGggKyAiLCIgKyBoZWlnaHQpOwoKICAgICAgICB2YXIgcHJldmlvdXNTaXplID0ge307CiAgICAgICAgcHJldmlvdXNTaXplLndpZHRoID0gY3VycmVudFBvc2l0aW9uLndpZHRoOwogICAgICAgIHByZXZpb3VzU2l6ZS5oZWlnaHQgPSBjdXJyZW50UG9zaXRpb24uaGVpZ2h0OwogICAgICAgIGxvZy5pKCJwcmV2aW91c1NpemUgIiArIHByZXZpb3VzU2l6ZS53aWR0aCArICIsIiArIHByZXZpb3VzU2l6ZS5oZWlnaHQpOwoKICAgICAgICBjdXJyZW50UG9zaXRpb24ueCA9IHg7CiAgICAgICAgY3VycmVudFBvc2l0aW9uLnkgPSB5OwogICAgICAgIGN1cnJlbnRQb3NpdGlvbi53aWR0aCA9IHdpZHRoOwogICAgICAgIGN1cnJlbnRQb3NpdGlvbi5oZWlnaHQgPSBoZWlnaHQ7CgogICAgICAgIGlmICh3aWR0aCAhPT0gcHJldmlvdXNTaXplLndpZHRoIHx8IGhlaWdodCAhPT0gcHJldmlvdXNTaXplLmhlaWdodCkgewogICAgICAgICAgICBtcmFpZC5maXJlU2l6ZUNoYW5nZUV2ZW50KHdpZHRoLCBoZWlnaHQpOwogICAgICAgIH0KICAgIH07CgogICAgbXJhaWQuc2V0RGVmYXVsdFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0RGVmYXVsdFBvc2l0aW9uICIgKyB4ICsgIiwiICsgeSArICIsIiArIHdpZHRoICsgIiwiICsgaGVpZ2h0KTsKICAgICAgICBkZWZhdWx0UG9zaXRpb24ueCA9IHg7CiAgICAgICAgZGVmYXVsdFBvc2l0aW9uLnkgPSB5OwogICAgICAgIGRlZmF1bHRQb3NpdGlvbi53aWR0aCA9IHdpZHRoOwogICAgICAgIGRlZmF1bHRQb3NpdGlvbi5oZWlnaHQgPSBoZWlnaHQ7CiAgICB9OwoKICAgIG1yYWlkLnNldEV4cGFuZFNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRFeHBhbmRTaXplICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7CiAgICAgICAgZXhwYW5kUHJvcGVydGllcy53aWR0aCA9IHdpZHRoOwogICAgICAgIGV4cGFuZFByb3BlcnRpZXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgfTsKCiAgICBtcmFpZC5zZXRNYXhTaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0TWF4U2l6ZSAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOwogICAgICAgIG1heFNpemUud2lkdGggPSB3aWR0aDsKICAgICAgICBtYXhTaXplLmhlaWdodCA9IGhlaWdodDsKICAgIH07CgogICAgbXJhaWQuc2V0UGxhY2VtZW50VHlwZSA9IGZ1bmN0aW9uIChwdCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRQbGFjZW1lbnRUeXBlICIgKyBwdCk7CiAgICAgICAgcGxhY2VtZW50VHlwZSA9IHB0OwogICAgfTsKCiAgICBtcmFpZC5zZXRTY3JlZW5TaXplID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0U2NyZWVuU2l6ZSAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOwogICAgICAgIHNjcmVlblNpemUud2lkdGggPSB3aWR0aDsKICAgICAgICBzY3JlZW5TaXplLmhlaWdodCA9IGhlaWdodDsKICAgICAgICB1cGRhdGVDcmVhdGl2ZVNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgaWYgKCFpc0V4cGFuZFByb3BlcnRpZXNTZXQpIHsKICAgICAgICAgICAgZXhwYW5kUHJvcGVydGllcy53aWR0aCA9IHdpZHRoOwogICAgICAgICAgICBleHBhbmRQcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLnNldFN1cHBvcnRzID0gZnVuY3Rpb24gKGZlYXR1cmUsIHN1cHBvcnRlZCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRTdXBwb3J0cyAiICsgZmVhdHVyZSArICIgIiArIHN1cHBvcnRlZCk7CiAgICAgICAgc3VwcG9ydGVkRmVhdHVyZXNbZmVhdHVyZV0gPSBzdXBwb3J0ZWQ7CiAgICB9OwoKICAgIG1yYWlkLnNldFNka1ZlcnNpb24gPSBmdW5jdGlvbiAoc2RrVmVyc2lvbikgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRTZGtWZXJzaW9uICIgKyBzZGtWZXJzaW9uKTsKICAgICAgICBpZiAoc2RrVmVyc2lvbiAmJiBzZGtWZXJzaW9uICE9PSAiIikgewogICAgICAgICAgICBtcmFpZEVudi5zZGtWZXJzaW9uID0gc2RrVmVyc2lvbjsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLnNldEFwcElkID0gZnVuY3Rpb24gKGJ1bmRsZU5hbWUpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0QXBwSWQgIiArIGJ1bmRsZU5hbWUpOwogICAgICAgIGlmIChidW5kbGVOYW1lICYmIGJ1bmRsZU5hbWUgIT09ICIiKSB7CiAgICAgICAgICAgIG1yYWlkRW52LmFwcElkID0gYnVuZGxlTmFtZTsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLnNldElmYSA9IGZ1bmN0aW9uIChpZmEpIHsKICAgICAgICBsb2cuaSgibXJhaWQuc2V0SWZhICIgKyBpZmEpOwogICAgICAgIGlmIChpZmEgJiYgaWZhICE9PSAiIikgewogICAgICAgICAgICBtcmFpZEVudi5zZGtWZXJzaW9uID0gaWZhOwogICAgICAgIH0KICAgIH07CgogICAgbXJhaWQuc2V0TGltaXRBZFRyYWNraW5nID0gZnVuY3Rpb24gKGxpbWl0QWRUcmFja2luZykgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRMaW1pdEFkVHJhY2tpbmcgIiArIGxpbWl0QWRUcmFja2luZyk7CiAgICAgICAgbXJhaWRFbnYubGltaXRBZFRyYWNraW5nID0gbGltaXRBZFRyYWNraW5nOwogICAgfTsKCiAgICBtcmFpZC5zZXRDb3BwYSA9IGZ1bmN0aW9uIChjb3BwYSkgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRDb3BwYSAiICsgY29wcGEpOwogICAgICAgIG1yYWlkRW52LmNvcHBhID0gY29wcGE7CiAgICB9OwoKICAgIG1yYWlkLnNldEN1cnJlbnRBcHBPcmllbnRhdGlvbiA9IGZ1bmN0aW9uIChuZXdBcHBPcmllbnRhdGlvbikgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRDdXJyZW50QXBwT3JpZW50YXRpb24gIiArIG5ld0FwcE9yaWVudGF0aW9uKTsKICAgICAgICBpZiAobmV3QXBwT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgY3VycmVudEFwcE9yaWVudGF0aW9uID0gbmV3QXBwT3JpZW50YXRpb247CiAgICAgICAgfQogICAgfTsKCiAgICBtcmFpZC5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uIChuZXdMb2NhdGlvbikgewogICAgICAgIGxvZy5pKCJtcmFpZC5zZXRMb2NhdGlvbiAiICsgbmV3TG9jYXRpb24pOwogICAgICAgIGlmIChuZXdMb2NhdGlvbikgewogICAgICAgICAgICBsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOwogICAgICAgIH0KICAgIH07CgogICAgLy8gbWV0aG9kcyB0byBmaXJlIGV2ZW50cwoKICAgIG1yYWlkLmZpcmVFcnJvckV2ZW50ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGFjdGlvbikgewogICAgICAgIGxvZy5pKCJtcmFpZC5maXJlRXJyb3JFdmVudCAiICsgbWVzc2FnZSArICIgIiArIGFjdGlvbik7CiAgICAgICAgZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5FUlJPUiwgbWVzc2FnZSwgYWN0aW9uKTsKICAgIH07CgogICAgbXJhaWQuZmlyZVJlYWR5RXZlbnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmZpcmVSZWFkeUV2ZW50Iik7CiAgICAgICAgZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5SRUFEWSk7CiAgICB9OwoKICAgIG1yYWlkLmZpcmVTaXplQ2hhbmdlRXZlbnQgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewogICAgICAgIGxvZy5pKCJtcmFpZC5maXJlU2l6ZUNoYW5nZUV2ZW50ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7CiAgICAgICAgaWYgKHN0YXRlICE9PSBtcmFpZC5TVEFURVMuTE9BRElORykgewogICAgICAgICAgICBmaXJlRXZlbnQobXJhaWQuRVZFTlRTLlNJWkVDSEFOR0UsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgIH0KICAgIH07CgogICAgbXJhaWQuZmlyZVN0YXRlQ2hhbmdlRXZlbnQgPSBmdW5jdGlvbiAobmV3U3RhdGUpIHsKICAgICAgICBsb2cuaSgibXJhaWQuZmlyZVN0YXRlQ2hhbmdlRXZlbnQgIiArIG5ld1N0YXRlKTsKICAgICAgICBpZiAoc3RhdGUgIT09IG5ld1N0YXRlKSB7CiAgICAgICAgICAgIHN0YXRlID0gbmV3U3RhdGU7CiAgICAgICAgICAgIGZpcmVFdmVudChtcmFpZC5FVkVOVFMuU1RBVEVDSEFOR0UsIHN0YXRlKTsKICAgICAgICB9CiAgICB9OwoKICAgIG1yYWlkLmZpcmVFeHBvc3VyZUNoYW5nZUV2ZW50ID0gZnVuY3Rpb24gKGV4cG9zZWRQZXJjZW50YWdlLCB2aXNpYmxlUmVjdGFuZ2xlLCBvY2NsdXNpb25SZWN0YW5nbGVzKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmZpcmVFeHBvc3VyZUNoYW5nZUV2ZW50ICIgKyBleHBvc2VkUGVyY2VudGFnZSArICIgIiArIHZpc2libGVSZWN0YW5nbGUgKyAiICIgKyBvY2NsdXNpb25SZWN0YW5nbGVzKTsKICAgICAgICBpZiAoc3RhdGUgIT09IG1yYWlkLlNUQVRFUy5MT0FESU5HKSB7CiAgICAgICAgICAgIGV4cG9zdXJlLmV4cG9zZWRQZXJjZW50YWdlID0gZXhwb3NlZFBlcmNlbnRhZ2U7CiAgICAgICAgICAgIGV4cG9zdXJlLnZpc2libGVSZWN0YW5nbGUgPSB2aXNpYmxlUmVjdGFuZ2xlOwogICAgICAgICAgICBpZiAob2NjbHVzaW9uUmVjdGFuZ2xlcykgewogICAgICAgICAgICAgICAgaWYgKGV4cG9zdXJlLm9jY2x1c2lvblJlY3RhbmdsZXMpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9jY2x1c2lvblJlY3RhbmdsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3N1cmUub2NjbHVzaW9uUmVjdGFuZ2xlcy5wdXNoKG9jY2x1c2lvblJlY3RhbmdsZXNbaV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZXhwb3N1cmUub2NjbHVzaW9uUmVjdGFuZ2xlcyA9IG9jY2x1c2lvblJlY3RhbmdsZXMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGV4cG9zdXJlLm9jY2x1c2lvblJlY3RhbmdsZXMgPSBudWxsCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZpcmVFdmVudChtcmFpZC5FVkVOVFMuRVhQT1NVUkVDSEFOR0UsIGV4cG9zZWRQZXJjZW50YWdlLCB2aXNpYmxlUmVjdGFuZ2xlLCBvY2NsdXNpb25SZWN0YW5nbGVzKTsKICAgICAgICAgICAgaWYgKGV4cG9zZWRQZXJjZW50YWdlID4gMC4wKSB7CiAgICAgICAgICAgICAgICBpc1ZpZXdhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGZpcmVFdmVudChtcmFpZC5FVkVOVFMuVklFV0FCTEVDSEFOR0UsIGlzVmlld2FibGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaXNWaWV3YWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5WSUVXQUJMRUNIQU5HRSwgaXNWaWV3YWJsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfTsKCiAgICBtcmFpZC5maXJlQXVkaW9Wb2x1bWVDaGFuZ2VFdmVudCA9IGZ1bmN0aW9uIChuZXdWb2x1bWVQZXJjZW50YWdlKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmZpcmVBdWRpb1ZvbHVtZUNoYW5nZUV2ZW50ICIgKyBuZXdWb2x1bWVQZXJjZW50YWdlKTsKICAgICAgICBpZiAodm9sdW1lUGVyY2VudGFnZSAhPT0gbmV3Vm9sdW1lUGVyY2VudGFnZSkgewogICAgICAgICAgICB2b2x1bWVQZXJjZW50YWdlID0gbmV3Vm9sdW1lUGVyY2VudGFnZTsKICAgICAgICAgICAgZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5BVURJT1ZPTFVNRUNIQU5HRSwgdm9sdW1lUGVyY2VudGFnZSk7CiAgICAgICAgfQogICAgfTsKCiAgICBtcmFpZC5maXJlVmlld2FibGVDaGFuZ2VFdmVudCA9IGZ1bmN0aW9uIChuZXdJc1ZpZXdhYmxlKSB7CiAgICAgICAgbG9nLmkoIm1yYWlkLmZpcmVWaWV3YWJsZUNoYW5nZUV2ZW50ICIgKyBuZXdJc1ZpZXdhYmxlKTsKICAgICAgICBpZiAoaXNWaWV3YWJsZSAhPT0gbmV3SXNWaWV3YWJsZSkgewogICAgICAgICAgICBpc1ZpZXdhYmxlID0gbmV3SXNWaWV3YWJsZTsKICAgICAgICAgICAgZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5WSUVXQUJMRUNIQU5HRSwgaXNWaWV3YWJsZSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgKiBpbnRlcm5hbCBoZWxwZXIgbWV0aG9kcwogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgIGZ1bmN0aW9uIGNhbGxOYXRpdmUoY29tbWFuZCkgewogICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJRlJBTUUiKTsKICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCJzcmMiLCAibXJhaWQ6Ly8iICsgY29tbWFuZCk7CiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGlmcmFtZSk7CiAgICAgICAgaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKICAgICAgICBpZnJhbWUgPSBudWxsOwogICAgfTsKCiAgICBmdW5jdGlvbiBmaXJlRXZlbnQoZXZlbnQpIHsKICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICAgICAgYXJncy5zaGlmdCgpOwogICAgICAgIGxvZy5pKCJmaXJlRXZlbnQgIiArIGV2ZW50ICsgIiBbIiArIGFyZ3MudG9TdHJpbmcoKSArICJdIik7CiAgICAgICAgdmFyIGV2ZW50TGlzdGVuZXJzID0gKGxpc3RlbmVyc1tldmVudF0gfHwgW10pLnNsaWNlKDApOwogICAgICAgIGlmIChldmVudExpc3RlbmVycykgewogICAgICAgICAgICBsb2cuaShldmVudExpc3RlbmVycy5sZW5ndGggKyAiIGxpc3RlbmVyKHMpIGZvdW5kIGZvciAiICsgZXZlbnQpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBsb2cuaSgiZmlyaW5nIGxpc3RlbmVyICIgKyBpICsgIiBmb3IgIiArIGV2ZW50ICsgIjogIiArIGV2ZW50TGlzdGVuZXJzW2ldKTsKICAgICAgICAgICAgICAgIGV2ZW50TGlzdGVuZXJzW2ldLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbG9nLmkoIm5vIGxpc3RlbmVycyBmb3VuZCIpOwogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gY29udGFpbnModmFsdWUsIGFycmF5KSB7CiAgICAgICAgZm9yICh2YXIgaSBpbiBhcnJheSkgewogICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8vIFRoZSBhY3Rpb24gcGFyYW1ldGVyIGlzIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBzZXR0ZXIgZnVuY3Rpb24KICAgIC8vIHdoaWNoIGNhbGxlZCB0aGlzIGZ1bmN0aW9uCiAgICAvLyAoaW4gb3RoZXIgd29yZHMsIHNldEV4cGFuZFByb3BldGllcywgc2V0T3JpZW50YXRpb25Qcm9wZXJ0aWVzLCBvcgogICAgLy8gc2V0UmVzaXplUHJvcGVydGllcykuCiAgICAvLyBJdCBzZXJ2ZXMgYm90aCBhcyB0aGUga2V5IHRvIGdldCB0aGUgdGhlIGFwcHJvcHJpYXRlIHNldCBvZiB2YWxpZGF0aW5nCiAgICAvLyBmdW5jdGlvbnMgZnJvbSB0aGUgYWxsVmFsaWRhdG9ycyBvYmplY3QKICAgIC8vIGFzIHdlbGwgYXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgb2YgYW55IGVycm9yIGV2ZW50IHRoYXQgbWF5IGJlIHRocm93bi4KICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BlcnRpZXMsIGFjdGlvbikgewogICAgICAgIHZhciByZXR2YWwgPSB0cnVlOwogICAgICAgIHZhciB2YWxpZGF0b3JzID0gYWxsVmFsaWRhdG9yc1thY3Rpb25dOwogICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcGVydGllcykgewogICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1twcm9wXTsKICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1twcm9wXTsKICAgICAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAhdmFsaWRhdG9yKHZhbHVlKSkgewogICAgICAgICAgICAgICAgbXJhaWQuZmlyZUVycm9yRXZlbnQoIlZhbHVlIG9mIHByb3BlcnR5ICIgKyBwcm9wICsgIiAoIiArIHZhbHVlICsgIikgaXMgaW52YWxpZCIsICJtcmFpZC4iICsgYWN0aW9uKTsKICAgICAgICAgICAgICAgIHJldHZhbCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR2YWw7CiAgICB9OwoKICAgIHZhciBhbGxWYWxpZGF0b3JzID0gewogICAgICAgICJzZXRFeHBhbmRQcm9wZXJ0aWVzIjogewogICAgICAgICAgICAvLyBJbiBNUkFJRCAyLjAsIHRoZSBvbmx5IHByb3BlcnR5IGluIGV4cGFuZFByb3BlcnRpZXMgd2UgYWN0dWFsbHkgY2FyZSBhYm91dCBpcyB1c2VDdXN0b21DbG9zZS4KICAgICAgICAgICAgLy8gU3RpbGwsIHdlJ2xsIGRvIGEgYmFzaWMgc2FuaXR5IGNoZWNrIG9uIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMsIHRvby4KICAgICAgICAgICAgIndpZHRoIjogZnVuY3Rpb24gKHdpZHRoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWlzTmFOKHdpZHRoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImhlaWdodCI6IGZ1bmN0aW9uIChoZWlnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhaXNOYU4oaGVpZ2h0KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInVzZUN1c3RvbUNsb3NlIjogZnVuY3Rpb24gKHVzZUN1c3RvbUNsb3NlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiB1c2VDdXN0b21DbG9zZSA9PT0gImJvb2xlYW4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInNldE9yaWVudGF0aW9uUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgImFsbG93T3JpZW50YXRpb25DaGFuZ2UiOiBmdW5jdGlvbiAoYWxsb3dPcmllbnRhdGlvbkNoYW5nZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgYWxsb3dPcmllbnRhdGlvbkNoYW5nZSA9PT0gImJvb2xlYW4iKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZvcmNlT3JpZW50YXRpb24iOiBmdW5jdGlvbiAoZm9yY2VPcmllbnRhdGlvbikgewogICAgICAgICAgICAgICAgdmFyIHZhbGlkVmFsdWVzID0gWyJwb3J0cmFpdCIsICJsYW5kc2NhcGUiLCAibm9uZSJdOwogICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgZm9yY2VPcmllbnRhdGlvbiA9PT0gInN0cmluZyIgJiYgdmFsaWRWYWx1ZXMuaW5kZXhPZihmb3JjZU9yaWVudGF0aW9uKSAhPT0gLTEpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAic2V0UmVzaXplUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgIndpZHRoIjogZnVuY3Rpb24gKHdpZHRoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWlzTmFOKHdpZHRoKSAmJiA1MCA8PSB3aWR0aDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImhlaWdodCI6IGZ1bmN0aW9uIChoZWlnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhaXNOYU4oaGVpZ2h0KSAmJiA1MCA8PSBoZWlnaHQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvZmZzZXRYIjogZnVuY3Rpb24gKG9mZnNldFgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhaXNOYU4ob2Zmc2V0WCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJvZmZzZXRZIjogZnVuY3Rpb24gKG9mZnNldFkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhaXNOYU4ob2Zmc2V0WSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJjdXN0b21DbG9zZVBvc2l0aW9uIjogZnVuY3Rpb24gKGN1c3RvbUNsb3NlUG9zaXRpb24pIHsKICAgICAgICAgICAgICAgIHZhciB2YWxpZFBvc2l0aW9ucyA9IFsidG9wLWxlZnQiLCAidG9wLWNlbnRlciIsICJ0b3AtcmlnaHQiLAogICAgICAgICAgICAgICAgICAgICJjZW50ZXIiLAogICAgICAgICAgICAgICAgICAgICJib3R0b20tbGVmdCIsICJib3R0b20tY2VudGVyIiwgImJvdHRvbS1yaWdodCJdOwogICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgY3VzdG9tQ2xvc2VQb3NpdGlvbiA9PT0gInN0cmluZyIgJiYgdmFsaWRQb3NpdGlvbnMuaW5kZXhPZihjdXN0b21DbG9zZVBvc2l0aW9uKSAhPT0gLTEpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAiYWxsb3dPZmZzY3JlZW4iOiBmdW5jdGlvbiAoYWxsb3dPZmZzY3JlZW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGFsbG93T2Zmc2NyZWVuID09PSAiYm9vbGVhbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBpc0Nsb3NlUmVnaW9uT25TY3JlZW4ocHJvcGVydGllcykgewogICAgICAgIGxvZy5kKCJpc0Nsb3NlUmVnaW9uT25TY3JlZW4iKTsKICAgICAgICBsb2cuZCgiZGVmYXVsdFBvc2l0aW9uICIgKyBkZWZhdWx0UG9zaXRpb24ueCArICIgIiArIGRlZmF1bHRQb3NpdGlvbi55KTsKICAgICAgICBsb2cuZCgib2Zmc2V0ICIgKyBwcm9wZXJ0aWVzLm9mZnNldFggKyAiICIgKyBwcm9wZXJ0aWVzLm9mZnNldFkpOwoKICAgICAgICB2YXIgcmVzaXplUmVjdCA9IHt9OwogICAgICAgIHJlc2l6ZVJlY3QueCA9IGRlZmF1bHRQb3NpdGlvbi54ICsgcHJvcGVydGllcy5vZmZzZXRYOwogICAgICAgIHJlc2l6ZVJlY3QueSA9IGRlZmF1bHRQb3NpdGlvbi55ICsgcHJvcGVydGllcy5vZmZzZXRZOwogICAgICAgIHJlc2l6ZVJlY3Qud2lkdGggPSBwcm9wZXJ0aWVzLndpZHRoOwogICAgICAgIHJlc2l6ZVJlY3QuaGVpZ2h0ID0gcHJvcGVydGllcy5oZWlnaHQ7CiAgICAgICAgcHJpbnRSZWN0KCJyZXNpemVSZWN0IiwgcmVzaXplUmVjdCk7CgogICAgICAgIHZhciBjdXN0b21DbG9zZVBvc2l0aW9uID0gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgiY3VzdG9tQ2xvc2VQb3NpdGlvbiIpID8KICAgICAgICAgICAgcHJvcGVydGllcy5jdXN0b21DbG9zZVBvc2l0aW9uIDogcmVzaXplUHJvcGVydGllcy5jdXN0b21DbG9zZVBvc2l0aW9uOwogICAgICAgIGxvZy5kKCJjdXN0b21DbG9zZVBvc2l0aW9uICIgKyBjdXN0b21DbG9zZVBvc2l0aW9uKTsKCiAgICAgICAgdmFyIGNsb3NlUmVjdCA9IHsid2lkdGgiOiA1MCwgImhlaWdodCI6IDUwfTsKCiAgICAgICAgaWYgKGN1c3RvbUNsb3NlUG9zaXRpb24uc2VhcmNoKCJsZWZ0IikgIT09IC0xKSB7CiAgICAgICAgICAgIGNsb3NlUmVjdC54ID0gcmVzaXplUmVjdC54OwogICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tQ2xvc2VQb3NpdGlvbi5zZWFyY2goImNlbnRlciIpICE9PSAtMSkgewogICAgICAgICAgICBjbG9zZVJlY3QueCA9IHJlc2l6ZVJlY3QueCArIChyZXNpemVSZWN0LndpZHRoIC8gMikgLSAyNTsKICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUNsb3NlUG9zaXRpb24uc2VhcmNoKCJyaWdodCIpICE9PSAtMSkgewogICAgICAgICAgICBjbG9zZVJlY3QueCA9IHJlc2l6ZVJlY3QueCArIHJlc2l6ZVJlY3Qud2lkdGggLSA1MDsKICAgICAgICB9CgogICAgICAgIGlmIChjdXN0b21DbG9zZVBvc2l0aW9uLnNlYXJjaCgidG9wIikgIT09IC0xKSB7CiAgICAgICAgICAgIGNsb3NlUmVjdC55ID0gcmVzaXplUmVjdC55OwogICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tQ2xvc2VQb3NpdGlvbiA9PT0gImNlbnRlciIpIHsKICAgICAgICAgICAgY2xvc2VSZWN0LnkgPSByZXNpemVSZWN0LnkgKyAocmVzaXplUmVjdC5oZWlnaHQgLyAyKSAtIDI1OwogICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tQ2xvc2VQb3NpdGlvbi5zZWFyY2goImJvdHRvbSIpICE9PSAtMSkgewogICAgICAgICAgICBjbG9zZVJlY3QueSA9IHJlc2l6ZVJlY3QueSArIHJlc2l6ZVJlY3QuaGVpZ2h0IC0gNTA7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF4UmVjdCA9IHsieCI6IDAsICJ5IjogMH07CiAgICAgICAgbWF4UmVjdC53aWR0aCA9IG1heFNpemUud2lkdGg7CiAgICAgICAgbWF4UmVjdC5oZWlnaHQgPSBtYXhTaXplLmhlaWdodDsKCiAgICAgICAgcmV0dXJuIGlzUmVjdENvbnRhaW5lZChtYXhSZWN0LCBjbG9zZVJlY3QpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpdFJlc2l6ZVZpZXdPblNjcmVlbihwcm9wZXJ0aWVzKSB7CiAgICAgICAgbG9nLmQoImZpdFJlc2l6ZVZpZXdPblNjcmVlbiIpOwogICAgICAgIGxvZy5kKCJkZWZhdWx0UG9zaXRpb24gIiArIGRlZmF1bHRQb3NpdGlvbi54ICsgIiAiICsgZGVmYXVsdFBvc2l0aW9uLnkpOwogICAgICAgIGxvZy5kKCJvZmZzZXQgIiArIHByb3BlcnRpZXMub2Zmc2V0WCArICIgIiArIHByb3BlcnRpZXMub2Zmc2V0WSk7CgogICAgICAgIHZhciByZXNpemVSZWN0ID0ge307CiAgICAgICAgcmVzaXplUmVjdC54ID0gZGVmYXVsdFBvc2l0aW9uLnggKyBwcm9wZXJ0aWVzLm9mZnNldFg7CiAgICAgICAgcmVzaXplUmVjdC55ID0gZGVmYXVsdFBvc2l0aW9uLnkgKyBwcm9wZXJ0aWVzLm9mZnNldFk7CiAgICAgICAgcmVzaXplUmVjdC53aWR0aCA9IHByb3BlcnRpZXMud2lkdGg7CiAgICAgICAgcmVzaXplUmVjdC5oZWlnaHQgPSBwcm9wZXJ0aWVzLmhlaWdodDsKICAgICAgICBwcmludFJlY3QoInJlc2l6ZVJlY3QiLCByZXNpemVSZWN0KTsKCiAgICAgICAgdmFyIG1heFJlY3QgPSB7IngiOiAwLCAieSI6IDB9OwogICAgICAgIG1heFJlY3Qud2lkdGggPSBtYXhTaXplLndpZHRoOwogICAgICAgIG1heFJlY3QuaGVpZ2h0ID0gbWF4U2l6ZS5oZWlnaHQ7CgogICAgICAgIHZhciBhZGp1c3RtZW50cyA9IHsieCI6IDAsICJ5IjogMH07CgogICAgICAgIGlmIChpc1JlY3RDb250YWluZWQobWF4UmVjdCwgcmVzaXplUmVjdCkpIHsKICAgICAgICAgICAgbG9nLmQoIm5vIGFkanVzdG1lbnQgbmVjZXNzYXJ5Iik7CiAgICAgICAgICAgIHJldHVybiBhZGp1c3RtZW50czsKICAgICAgICB9CgogICAgICAgIGlmIChyZXNpemVSZWN0LnggPCBtYXhSZWN0LngpIHsKICAgICAgICAgICAgYWRqdXN0bWVudHMueCA9IG1heFJlY3QueCAtIHJlc2l6ZVJlY3QueDsKICAgICAgICB9IGVsc2UgaWYgKChyZXNpemVSZWN0LnggKyByZXNpemVSZWN0LndpZHRoKSA+IChtYXhSZWN0LnggKyBtYXhSZWN0LndpZHRoKSkgewogICAgICAgICAgICBhZGp1c3RtZW50cy54ID0gKG1heFJlY3QueCArIG1heFJlY3Qud2lkdGgpIC0gKHJlc2l6ZVJlY3QueCArIHJlc2l6ZVJlY3Qud2lkdGgpOwogICAgICAgIH0KICAgICAgICBsb2cuZCgiYWRqdXN0bWVudHMueCAiICsgYWRqdXN0bWVudHMueCk7CgogICAgICAgIGlmIChyZXNpemVSZWN0LnkgPCBtYXhSZWN0LnkpIHsKICAgICAgICAgICAgYWRqdXN0bWVudHMueSA9IG1heFJlY3QueSAtIHJlc2l6ZVJlY3QueTsKICAgICAgICB9IGVsc2UgaWYgKChyZXNpemVSZWN0LnkgKyByZXNpemVSZWN0LmhlaWdodCkgPiAobWF4UmVjdC55ICsgbWF4UmVjdC5oZWlnaHQpKSB7CiAgICAgICAgICAgIGFkanVzdG1lbnRzLnkgPSAobWF4UmVjdC55ICsgbWF4UmVjdC5oZWlnaHQpIC0gKHJlc2l6ZVJlY3QueSArIHJlc2l6ZVJlY3QuaGVpZ2h0KTsKICAgICAgICB9CiAgICAgICAgbG9nLmQoImFkanVzdG1lbnRzLnkgIiArIGFkanVzdG1lbnRzLnkpOwoKICAgICAgICByZXNpemVSZWN0LnggPSBkZWZhdWx0UG9zaXRpb24ueCArIHByb3BlcnRpZXMub2Zmc2V0WCArIGFkanVzdG1lbnRzLng7CiAgICAgICAgcmVzaXplUmVjdC55ID0gZGVmYXVsdFBvc2l0aW9uLnkgKyBwcm9wZXJ0aWVzLm9mZnNldFkgKyBhZGp1c3RtZW50cy55OwogICAgICAgIHByaW50UmVjdCgiYWRqdXN0ZWQgcmVzaXplUmVjdCIsIHJlc2l6ZVJlY3QpOwoKICAgICAgICByZXR1cm4gYWRqdXN0bWVudHM7CiAgICB9CgogICAgZnVuY3Rpb24gaXNSZWN0Q29udGFpbmVkKGNvbnRhaW5pbmdSZWN0LCBjb250YWluZWRSZWN0KSB7CiAgICAgICAgbG9nLmQoImlzUmVjdENvbnRhaW5lZCIpOwogICAgICAgIHByaW50UmVjdCgiY29udGFpbmluZ1JlY3QiLCBjb250YWluaW5nUmVjdCk7CiAgICAgICAgcHJpbnRSZWN0KCJjb250YWluZWRSZWN0IiwgY29udGFpbmVkUmVjdCk7CiAgICAgICAgcmV0dXJuIChjb250YWluZWRSZWN0LnggPj0gY29udGFpbmluZ1JlY3QueCAmJgogICAgICAgICAgICAoY29udGFpbmVkUmVjdC54ICsgY29udGFpbmVkUmVjdC53aWR0aCkgPD0gKGNvbnRhaW5pbmdSZWN0LnggKyBjb250YWluaW5nUmVjdC53aWR0aCkgJiYKICAgICAgICAgICAgY29udGFpbmVkUmVjdC55ID49IGNvbnRhaW5pbmdSZWN0LnkgJiYKICAgICAgICAgICAgKGNvbnRhaW5lZFJlY3QueSArIGNvbnRhaW5lZFJlY3QuaGVpZ2h0KSA8PSAoY29udGFpbmluZ1JlY3QueSArIGNvbnRhaW5pbmdSZWN0LmhlaWdodCkpOwogICAgfQoKICAgIGZ1bmN0aW9uIHByaW50UmVjdChsYWJlbCwgcmVjdCkgewogICAgICAgIGxvZy5kKGxhYmVsICsKICAgICAgICAgICAgIiBbIiArIHJlY3QueCArICIsIiArIHJlY3QueSArICJdIiArCiAgICAgICAgICAgICIsWyIgKyAocmVjdC54ICsgcmVjdC53aWR0aCkgKyAiLCIgKyAocmVjdC55ICsgcmVjdC5oZWlnaHQpICsgIl0iICsKICAgICAgICAgICAgIiAoIiArIHJlY3Qud2lkdGggKyAieCIgKyByZWN0LmhlaWdodCArICIpIik7CiAgICB9CgogICAgbXJhaWQuZHVtcExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbkV2ZW50cyA9IE9iamVjdC5rZXlzKGxpc3RlbmVycykubGVuZ3RoOwogICAgICAgIGxvZy5pKCJkdW1waW5nIGxpc3RlbmVycyAoIiArIG5FdmVudHMgKyAiIGV2ZW50cykiKTsKICAgICAgICBmb3IgKHZhciBldmVudCBpbiBsaXN0ZW5lcnMpIHsKICAgICAgICAgICAgdmFyIGV2ZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzW2V2ZW50XTsKICAgICAgICAgICAgbG9nLmkoIiAgIiArIGV2ZW50ICsgIiBjb250YWlucyAiICsgZXZlbnRMaXN0ZW5lcnMubGVuZ3RoICsgIiBsaXN0ZW5lcnMiKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3RlbmVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbG9nLmkoIiAgICAiICsgZXZlbnRMaXN0ZW5lcnNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBjb25zb2xlLmxvZygiTVJBSUQgb2JqZWN0IGxvYWRlZCIpOwoKfSkoKTs=" |
public static final java.lang.String |
new_close |
"iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3goHFBQe/AkWfQAADBBJREFUeNrtXUFIW1kUPT9VqyKM 0qqYQS2tuIwwCwOl0NW46SI44PJvymxaaIesxqXdSGVWA0JdTMCFSDaxCK4cswiB0NWM3XSVStQ2 4wiDCplYnJg7C38kDZr/3v/v/f/eNxcuZKHJ/++cd9999917n4EAChG1A+gFEAZwD8B9AA+sz98C GATwDYBO61++ADgB8DeAzwAKAD4C2LE+FwEcG4bxX9DGyggA2LcsoL8D8D2AHwAMSfq5vwCsAfgd wB8AioZhnKMlnoN+h4hiRJQi/yVlPcudFjJyQe8noqdEtEPqyo71jP0txMSA3kFEU0T0jvSTd9az d7R8AAcmHsCPAF4HhMuzAH4zDOOf1rRuDnyYiBYpuLJIROEW0lev70EG/ioiKOEnGD4D3wngJxmm /vT0FIeHh9jd3UU+n7/Uvb09FItFHB0doVwuAwC6u7vR19eHcDiMkZERjI2NXero6CgGBgbQ1dUl a2n41TCMLzdx1k+Jmk6VSoUKhQIlk0kyTZPa2toIgFBta2sj0zQpmUxSoVCgSqUi0iJM3TRzv+F2 xEqlEqXTaTJNUzjYrGqaJqXTaSqVSiJIsBH47aMVMHEsZ2dnlMlkKBaL+Qb6dRqLxSiTydDZ2Zlb IsSCCHw3ES07HZGDgwOan59XDvTrdH5+ng4ODtyQYJmIuoMC/jgRnTsZhXw+76uJF7FE5PN5pyQ4 J6Jx3cF/4uTNC4UCzczMaAt8o87MzFChUHBKhCe6gh/nfdPj42OKx+OBAb5R4/E4HR8fOyFBXCfg Q7xBnWq1SslkMrDAN2oymaRqteokeBRSHfx23iPa/f19ikajNwb8mkajUdrf33dy9Nyu8sndJs/b 3KRZ38wacMqmcieM1sxnBr9cLmvt3cvYLZTLZV4StKu05qd4PPyenp4W8A3a09PDu1NIKeET8Dh8 uVyuBbaN5nI5LsdQm63e2tpaC2BGXVtbU3+LyBPkSSQSLWA5NZFIqBssssK7TLK0tNQC1KEuLS3x kGDcK/C7WWP7rZnvqSU49+QAifVUr7Xm++ITLCtxni/C23/9+jWFQiHtwYtEIhSPx2l8fNyr3UFM Fvj9rPt8Ny86Pj5Oq6url1YkEoloDX5t9q6urromAUecoF8GATZYInxugzzr6+tffWc2m9XSEhiG Qdls9qt3WV9fdx0sYowYbogGnymB0214txF8XUlQP/Mbxa0lME3T20RTIur04mDnOvB1I8FVM79R 3FoCjgOkThEE+JnlSFcm+LqQoNnMF20JGI+Sf5bu+FWrVVfn+azgq04CHvBFkCAajbImlfS7IcCi LNNf7+3zimokYDH7MkjAuBQsOgU/zJLD5zX49YEmFbaITma+SBIw5hiGpcx+JwmcIsBXhQRuZr4o EsTjcfFWwGrBIiXgs7m5SSLFr+VAxMwXRQLGANEdoZ6/k7z9jo4OevHihZNkSKVIIAP8eqt6+/Zt 7roDYTsCK7nTtmLH6eB1dXVpTQKRZv+qJW1iYsLRczFWIHWwEMA26uc24ieLBLJ9Apkz3w34HBHC KRYCvLMr1BQxmLpZAlVnfr0yFKS+cx34EV2l++zZMykDKtISqDzz0VCV7CowRBc97prW54ueWaov B7qAX1OG/gRPmxGgaRPGTCYjZW1VdTnQwew3aiaTsfvpHcd7f5mdOVSzBLrNfNR1KnEUE7BL9yqV StK3WDUSiBZeS6DjzK9Xhp5FsasI0LS8K51OexZo8dMx1HXm12s6nbZ7lFQj+Ldk7/11IEEQwOeI CdyqJ8Bws7+sVCqex9q99gmCAn5NGfoYDjOv/24zfVXfHchc87PZLBmG4fnYMRwQxZiPfv1u5CBj Ochms5ffr7PD5yJZZLGeAEWV1n+vSLC1tUVbW1uBA5/RDyjWd/doKjJ676pCgiCCD6u3MYO028b/ y+WyMrl3snyCoIFfU4Yikn4Q0YSKDqCOJPDL4XPhCE7Y7gBkxf+DthyoNPM5zgViIVxcqnit5PN5 qChv3rzB8+fPlXiWt2/f4tWrV3j//r1SY8SA3f0QLm7U1I4AqpBAVfAZsXsQwsV1qloSAACWl5fx 8uVLfPr0qQU+P3b3QER/NlskdGjj6odjqJrDd135mI38aRsEGh4e1qYs2yvHUEWH7yodHh62DwYR 0b/N/kKnrp41S+Dyto5AgF9rKGEj/4JsOn7p1p1jcnKStre3pYCfTqe1AR8AhUIhu1c6V7v/PKdE IhHMzs5iYmJCyvcTEYgIgZKgLAEyz/O9qDvwcwnQ3gmUeZ7vRd2B306g1ttAr8HXiQQs28AQgM/N loiRkRGl1/xUKoVHjx55/tvT09OYm5tDJBJRdnwYsPscAlBo9hdjY2PKgj83N4fp6WnfnkF1EjBg V2gD8FE3AqgAfj0J+vv78fjxY1SrVd0I8FG742C/1nwdfQKW42CtEkJUBV9VErAmhGiREqY6+CqS gDUlTPmkUJlBnu3tbeFnByqQgDkp1IoGKpsWLrtiZ3JyUst2NXbKnBZuEUDJwhCvqnR17VkEgYUh ypWGeV2rFzQS8JaGKVUc6metnqwyNK8PkHiLQ5UpD/e7Slf3PoaM6z9RfXm4RQLfG0SoUqKtOwm4 G0Sw+AGyW8SoWKKt63LgtEWMb02iVG3OoKNj6LhJlEUCz9vEyQRfVOq2TpbAcZs4iwCeNorUpS2L Tj6B20aRnrWK1a0njw4kcN0q1iKB9GbROph9HZcD182iLQJIbRevezcuVR1Dke3ipV0YITu272Wt nmqWQNiFERYJhF8ZE7Q+fCr5BEKvjGGNCfAcEA0NDdHKykpgwJdNgu3tbS5rJvzSKJYjYiL2a+N6 e3tpYWGBTk5OAgO+LBKcnJzQwsIC9fb2+ndtnEUAoRdHDg4OCiWBSlW6okhQA39wcND/iyNZrQBP sogoEqhYou2WBE7Al3p1LGtgiPfyaLckULk+3w0JfvnlF/Uuj2bdEfBeH++UBDo0Z3BCAl7w4dX1 8RYBOll+iTdvkJcEOnXmYCWBE7PPYfqJiDpF9RCYYvk13gghKwl0Ap+VBE7BZ4z4sUX9OEmwYfeL 5XKZu6GEHQl0BN+OBE7B7+npYSn2ICLaEF5oyOIQ8gaI7EigM/jXkcAp+BwBH/eOXxMSMKWb5HI5 1yQIAviNJPjw4YNj8HO5HCv4Maklx0S0zOq0OSXByspKYMCvaWdnJz18+JDu3r3L/b8cZyjL0mvO iaibbFrL1SSRSHC/bG9vLw0NDQUKfDeaSCRYwT8nom5PGg8Q0TjrUy0tLbWAdKhLS0s8YZJxT7tP ENET1idzYglaMz/BA/4TX1qQEFGcJ4rXAlb4mk9EFPe1Dw3LgZGb3cFNUw5v391Bj0AChMimrKwx TqBTA2qvtKenh2efT9aYq9Hqly66jGyyPnm5XFbiLkJV1DRN1ghfTTap1t1DFbGSSTd53sLvG0lV UI6DnXrwO6CiWJYgxfM2+/v7WtxKIlqj0aiTvIGUcjP/Gp9gkeetqtXqjbIGyWSSNZnjK4dPmTVf 9BaxPseQNdFUR43H46w5fGpt9bwIFjXuFHjrDlTWmZkZXg/f/yCP4LDxuZM3z+fzWu8WTNNkrdi5 LrY/jiCIdYC07HQkDg4OhFUle6Hz8/Num08ue3aw4zERYm5G5ezsjDKZjLROJW40FotRJpNhqc/3 9zxfARL0s6SX2UmpVKJ0Ou3rEmGaJqXTaZaePExpXNIyeRQlwhQJkkqlQoVCgZLJJJmmKaW3cVtb G5mmSclkkgqFAksfPh6Z8gsHw2cSdAL4CcBr0d99enqKw8ND7O7uIp/PX+re3h6KxSKOjo5QLpcB AN3d3ejr60M4HMbIyAjGxsYudXR0FAMDA+jq6pIxBLMAfjUM4wtusljLwiLdHFm8UeaegwjhgBNh 0XGhZhCXgCZEuAPgRxlLg08yC+A3wzD+aU1z/hPGKbJpXKWovLOevaOFpDg/4SnZNLP0WXasZ2yt 77KXCCuolFIA9JT1LHd0HEsjAGS4BSAM4DsA3wP4AcCQpJ/7C8AagN8B/AGgaBjGuc7jZwTUQrQD 6LWIcQ/AfQAPrM/fAhgE8A2AWvn0FwAnAP7GxVW6BVxcqLljfS4CODYM47+gjdX/V+LYxXLzNfgA AAAASUVORK5CYII=" |
public static final java.lang.String |
new_close_pressed |
"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 4RT5f02O5nnLDJUQAAAAAElFTkSuQmCC" |
public static final java.lang.String |
scaling_script |
"dmFyIGVsZW1lbnRUb1NjYWxlRm91bmQgPSBmYWxzZTsKICAgICAgICB2YXIgZWxlbWVudFRvU2NhbGUgPSBudWxsOwoKICAgICAgICBjb25zdCBjcmVhdGl2ZVJlc2l6ZSA9IGZ1bmN0aW9uIChwYXJlbnRfd2lkdGgsIHBhcmVudF9oZWlnaHQsIGVsZW1lbnQpIHsKICAgICAgICAgICAgbGV0IGNoaWxkX2RpdiA9IGVsZW1lbnQ7CgogICAgICAgICAgICBsZXQgY2hpbGRfaGVpZ2h0ID0gcGFyZW50X2hlaWdodDsKICAgICAgICAgICAgbGV0IGNoaWxkX3dpZHRoID0gcGFyZW50X3dpZHRoOwoKICAgICAgICAgICAgLy8gRFNQcyBjb3VsZCBiZSBhdHRhY2hpbmcgYmVhY29ucyhpbWcgMVgxKSBpbiBjaGlsZCBkaXYsIGRvIG5vdCBjb25zaWRlciBpdCBhcyBjcmVhdGl2ZSBmb3IgcmVzaXplCiAgICAgICAgICAgIGlmIChjaGlsZF9kaXYub2Zmc2V0SGVpZ2h0ID4gMSAmJiBjaGlsZF9kaXYub2Zmc2V0V2lkdGggPiAxKSB7CiAgICAgICAgICAgICAgICBjaGlsZF9oZWlnaHQgPSBjaGlsZF9kaXYub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICAgICAgY2hpbGRfd2lkdGggPSBjaGlsZF9kaXYub2Zmc2V0V2lkdGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxldCBhc3BlY3Rfd2lkdGggPSBjaGlsZF93aWR0aDsKICAgICAgICAgICAgbGV0IGFzcGVjdF9oZWlnaHQgPSBjaGlsZF9oZWlnaHQ7CiAgICAgICAgICAgIGlmIChjaGlsZF9oZWlnaHQgPCBwYXJlbnRfaGVpZ2h0IHx8IGNoaWxkX3dpZHRoIDwgcGFyZW50X3dpZHRoKSB7CiAgICAgICAgICAgICAgICBsZXQgcGFyZW50X2FzcGVjdCA9IHBhcmVudF93aWR0aCAvIHBhcmVudF9oZWlnaHQ7CiAgICAgICAgICAgICAgICBsZXQgY2hpbGRfYXNwZWN0ID0gY2hpbGRfd2lkdGggLyBjaGlsZF9oZWlnaHQ7CiAgICAgICAgICAgICAgICBsZXQgc2NhbGVfZmFjdG9yID0gMTsKICAgICAgICAgICAgICAgIGxldCBzY2FsZV9mYWN0b3JfeSA9IDE7CgogICAgICAgICAgICAgICAgaWYgKHBhcmVudF9hc3BlY3QgPiBjaGlsZF9hc3BlY3QpIHsKICAgICAgICAgICAgICAgICAgICBzY2FsZV9mYWN0b3IgPSAocGFyZW50X2hlaWdodCAvIGNoaWxkX2hlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgYXNwZWN0X3dpZHRoID0gY2hpbGRfd2lkdGggKiBzY2FsZV9mYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgYXNwZWN0X2hlaWdodCA9IHBhcmVudF9oZWlnaHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNjYWxlX2ZhY3RvciA9IChwYXJlbnRfd2lkdGggLyBjaGlsZF93aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgc2NhbGVfZmFjdG9yX3kgPSAocGFyZW50X2hlaWdodCAvIGNoaWxkX2hlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgYXNwZWN0X3dpZHRoID0gcGFyZW50X3dpZHRoOwogICAgICAgICAgICAgICAgICAgIGFzcGVjdF9oZWlnaHQgPSBjaGlsZF9oZWlnaHQgKiAoc2NhbGVfZmFjdG9yKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoYXNwZWN0X3dpZHRoIDwgcGFyZW50X3dpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgY2hpbGRfZGl2LnN0eWxlLm1hcmdpbkxlZnQgPSAocGFyZW50X3dpZHRoIC0gYXNwZWN0X3dpZHRoKSAvIDIgKyAicHgiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChhc3BlY3RfaGVpZ2h0IDwgcGFyZW50X2hlaWdodCkgewogICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2xhdGlvblBpeGVscyA9IChwYXJlbnRfaGVpZ2h0IC0gY2hpbGRfaGVpZ2h0KSAvIDIgKyAicHgiOwogICAgICAgICAgICAgICAgICAgIGNoaWxkX2Rpdi5zdHlsZS50cmFuc2Zvcm0gKz0gInRyYW5zbGF0ZSgwcHgsIiArIHRyYW5zbGF0aW9uUGl4ZWxzICsgIikiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoaWxkX2Rpdi5zdHlsZS50cmFuc2Zvcm0gKz0gInNjYWxlKCIgKyBzY2FsZV9mYWN0b3IgKyAiLCIgKyBzY2FsZV9mYWN0b3JfeSArICIpIjsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNvbnN0IGZpbmRFbGVtZW50QnlTaXplID0gZnVuY3Rpb24gKGN1cnJlbnRFbGVtZW50LCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQgPT09IGhlaWdodCAmJiBjdXJyZW50RWxlbWVudC5vZmZzZXRXaWR0aCA9PT0gd2lkdGgpIHsKICAgICAgICAgICAgICAgIGVsZW1lbnRUb1NjYWxlID0gY3VycmVudEVsZW1lbnQ7CiAgICAgICAgICAgICAgICBlbGVtZW50VG9TY2FsZUZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAmJiAhZWxlbWVudFRvU2NhbGVGb3VuZDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgZmluZEVsZW1lbnRCeVNpemUoY3VycmVudEVsZW1lbnQuY2hpbGRyZW5baV0sIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb25zdCB1cGRhdGVDcmVhdGl2ZVNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkgewogICAgICAgICAgICBlbGVtZW50VG9TY2FsZSA9IG51bGw7CiAgICAgICAgICAgIGVsZW1lbnRUb1NjYWxlRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgbGV0IHBhcmVudF9oZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgICAgIGxldCBwYXJlbnRfd2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgbGV0IGFkX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoeWJpZC1hZCcpOwogICAgICAgICAgICBmaW5kRWxlbWVudEJ5U2l6ZShhZF9jb250YWluZXIsIDMyMCwgNDgwKTsKCiAgICAgICAgICAgIGlmIChlbGVtZW50VG9TY2FsZUZvdW5kICYmIGVsZW1lbnRUb1NjYWxlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGNyZWF0aXZlUmVzaXplKHBhcmVudF93aWR0aCwgcGFyZW50X2hlaWdodCwgZWxlbWVudFRvU2NhbGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQ==" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
CALENDAR |
"calendar" |
public static final java.lang.String |
INLINE_VIDEO |
"inlineVideo" |
public static final java.lang.String |
LOCATION |
"location" |
public static final java.lang.String |
SMS |
"sms" |
public static final java.lang.String |
STORE_PICTURE |
"storePicture" |
public static final java.lang.String |
TEL |
"tel" |
public static final java.lang.String |
VPAID |
"vpaid" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
STATE_DEFAULT |
1 |
public static final int |
STATE_EXPANDED |
2 |
public static final int |
STATE_HIDDEN |
4 |
public static final int |
STATE_LOADING |
0 |
public static final int |
STATE_RESIZED |
3 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
ACTION_HANDLE_CUSTOM_EVENT |
"android.provider.calendar.action.HANDLE_CUSTOM_EVENT" |
public static final java.lang.String |
AUTHORITY |
"com.android.calendar" |
public static final java.lang.String |
DESCRIPTION |
"description" |
public static final java.lang.String |
DISPLAY_COLOR |
"displayColor" |
public static final java.lang.String |
EVENT_COLOR |
"eventColor" |
public static final java.lang.String |
EVENT_COLOR_KEY |
"eventColor_index" |
public static final java.lang.String |
EVENT_LOCATION |
"eventLocation" |
public static final java.lang.String |
EXTRA_CUSTOM_APP_URI |
"customAppUri" |
public static final java.lang.String |
EXTRA_EVENT_ALL_DAY |
"allDay" |
public static final java.lang.String |
EXTRA_EVENT_BEGIN_TIME |
"beginTime" |
public static final java.lang.String |
EXTRA_EVENT_END_TIME |
"endTime" |
public static final java.lang.String |
STATUS |
"eventStatus" |
public static final java.lang.String |
TITLE |
"title" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
FORCE_ORIENTATION_LANDSCAPE |
1 |
public static final int |
FORCE_ORIENTATION_NONE |
2 |
public static final int |
FORCE_ORIENTATION_PORTRAIT |
0 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
CUSTOM_CLOSE_POSITION_BOTTOM_CENTER |
5 |
public static final int |
CUSTOM_CLOSE_POSITION_BOTTOM_LEFT |
4 |
public static final int |
CUSTOM_CLOSE_POSITION_BOTTOM_RIGHT |
6 |
public static final int |
CUSTOM_CLOSE_POSITION_CENTER |
3 |
public static final int |
CUSTOM_CLOSE_POSITION_TOP_CENTER |
1 |
public static final int |
CUSTOM_CLOSE_POSITION_TOP_LEFT |
0 |
public static final int |
CUSTOM_CLOSE_POSITION_TOP_RIGHT |
2 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
BROADCAST_ID |
"adsdk_rewarded_broadcastId" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
EXTRA_BROADCAST_ID |
"extra_adsdk_broadcast_id" |
public static final java.lang.String |
EXTRA_ZONE_ID |
"extra_adsdk_zone_id" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
PN_BID |
"pn_bid" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
omsdkjs |
"OyhmdW5jdGlvbihvbWlkR2xvYmFsKSB7CiAgJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9J3VuZGVmaW5lZCchPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDphYShhKX19ZnVuY3Rpb24gcShhKXtpZighKGEgaW5zdGFuY2VvZiBBcnJheSkpe2E9cChhKTtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTthPWN9cmV0dXJuIGF9dmFyIGJhPSdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31iLnByb3RvdHlwZT1hO3JldHVybiBuZXcgYn0sY2E7CmlmKCdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YpY2E9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIGRhO2E6e3ZhciBlYT17UzohMH0sZmE9e307dHJ5e2ZhLl9fcHJvdG9fXz1lYTtkYT1mYS5TO2JyZWFrIGF9Y2F0Y2goYSl7fWRhPSExfWNhPWRhP2Z1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189YjtpZihhLl9fcHJvdG9fXyE9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihhKycgaXMgbm90IGV4dGVuc2libGUnKTtyZXR1cm4gYX06bnVsbH12YXIgaGE9Y2E7CmZ1bmN0aW9uIHIoYSxiKXthLnByb3RvdHlwZT1iYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZihoYSloYShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoJ3Byb3RvdHlwZSchPWMpaWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYixjKTtkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxjLGQpfWVsc2UgYVtjXT1iW2NdO2EuQ2E9Yi5wcm90b3R5cGV9dmFyIHQ9J3VuZGVmaW5lZCchPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PXRoaXM/dGhpczondW5kZWZpbmVkJyE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDp0aGlzO2Z1bmN0aW9uIHUoYSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYil9CnZhciBpYT0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpdShkLGUpJiYoYVtlXT1kW2VdKX1yZXR1cm4gYX0seD0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTsKZnVuY3Rpb24geShhLGIpe2lmKGIpe3ZhciBjPXQ7YT1hLnNwbGl0KCcuJyk7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aC0xO2QrKyl7dmFyIGU9YVtkXTtlIGluIGN8fChjW2VdPXt9KTtjPWNbZV19YT1hW2EubGVuZ3RoLTFdO2Q9Y1thXTtiPWIoZCk7YiE9ZCYmbnVsbCE9YiYmeChjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fXkoJ09iamVjdC5hc3NpZ24nLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxpYX0pO2Z1bmN0aW9uIGphKCl7amE9ZnVuY3Rpb24oKXt9O3QuU3ltYm9sfHwodC5TeW1ib2w9a2EpfWZ1bmN0aW9uIGxhKGEsYil7dGhpcy5hPWE7eCh0aGlzLCdkZXNjcmlwdGlvbicse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9bGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX07CnZhciBrYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7cmV0dXJuIG5ldyBsYSgnanNjb21wX3N5bWJvbF8nKyhjfHwnJykrJ18nK2IrKyxjKX12YXIgYj0wO3JldHVybiBhfSgpO2Z1bmN0aW9uIHooKXtqYSgpO3ZhciBhPXQuU3ltYm9sLml0ZXJhdG9yO2F8fChhPXQuU3ltYm9sLml0ZXJhdG9yPXQuU3ltYm9sKCdTeW1ib2wuaXRlcmF0b3InKSk7J2Z1bmN0aW9uJyE9dHlwZW9mIEFycmF5LnByb3RvdHlwZVthXSYmeChBcnJheS5wcm90b3R5cGUsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG1hKGFhKHRoaXMpKX19KTt6PWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBtYShhKXt6KCk7YT17bmV4dDphfTthW3QuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYX0KeSgnV2Vha01hcCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihnKXt0aGlzLmE9KGwrPU1hdGgucmFuZG9tKCkrMSkudG9TdHJpbmcoKTtpZihnKXtnPXAoZyk7Zm9yKHZhciBoOyEoaD1nLm5leHQoKSkuZG9uZTspaD1oLnZhbHVlLHRoaXMuc2V0KGhbMF0saFsxXSl9fWZ1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZChnKXtpZighdShnLGYpKXt2YXIgaD1uZXcgYzt4KGcsZix7dmFsdWU6aH0pfX1mdW5jdGlvbiBlKGcpe3ZhciBoPU9iamVjdFtnXTtoJiYoT2JqZWN0W2ddPWZ1bmN0aW9uKGspe2lmKGsgaW5zdGFuY2VvZiBjKXJldHVybiBrO2Qoayk7cmV0dXJuIGgoayl9KX1pZihmdW5jdGlvbigpe2lmKCFhfHwhT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBnPU9iamVjdC5zZWFsKHt9KSxoPU9iamVjdC5zZWFsKHt9KSxrPW5ldyBhKFtbZywyXSxbaCwzXV0pO2lmKDIhPWsuZ2V0KGcpfHwzIT1rLmdldChoKSlyZXR1cm4hMTtrLmRlbGV0ZShnKTtrLnNldChoLDQpO3JldHVybiFrLmhhcyhnKSYmCjQ9PWsuZ2V0KGgpfWNhdGNoKG0pe3JldHVybiExfX0oKSlyZXR1cm4gYTt2YXIgZj0nJGpzY29tcF9oaWRkZW5fJytNYXRoLnJhbmRvbSgpO2UoJ2ZyZWV6ZScpO2UoJ3ByZXZlbnRFeHRlbnNpb25zJyk7ZSgnc2VhbCcpO3ZhciBsPTA7Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGcsaCl7ZChnKTtpZighdShnLGYpKXRocm93IEVycm9yKCdXZWFrTWFwIGtleSBmYWlsOiAnK2cpO2dbZl1bdGhpcy5hXT1oO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHUoZyxmKT9nW2ZdW3RoaXMuYV06dm9pZCAwfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZyl7cmV0dXJuIHUoZyxmKSYmdShnW2ZdLHRoaXMuYSl9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdShnLGYpJiZ1KGdbZl0sdGhpcy5hKT9kZWxldGUgZ1tmXVt0aGlzLmFdOiExfTtyZXR1cm4gYn0pOwp5KCdNYXAnLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt2YXIgZz17fTtyZXR1cm4gZy5BPWcubmV4dD1nLmhlYWQ9Z31mdW5jdGlvbiBjKGcsaCl7dmFyIGs9Zy5hO3JldHVybiBtYShmdW5jdGlvbigpe2lmKGspe2Zvcig7ay5oZWFkIT1nLmE7KWs9ay5BO2Zvcig7ay5uZXh0IT1rLmhlYWQ7KXJldHVybiBrPWsubmV4dCx7ZG9uZTohMSx2YWx1ZTpoKGspfTtrPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfWZ1bmN0aW9uIGQoZyxoKXt2YXIgaz1oJiZ0eXBlb2YgaDsnb2JqZWN0Jz09a3x8J2Z1bmN0aW9uJz09az9mLmhhcyhoKT9rPWYuZ2V0KGgpOihrPScnKyArK2wsZi5zZXQoaCxrKSk6az0ncF8nK2g7dmFyIG09Zy5iW2tdO2lmKG0mJnUoZy5iLGspKWZvcihnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB2PW1bZ107aWYoaCE9PWgmJnYua2V5IT09di5rZXl8fGg9PT12LmtleSlyZXR1cm57aWQ6ayxsaXN0Om0saW5kZXg6ZyxzOnZ9fXJldHVybntpZDprLGxpc3Q6bSwKaW5kZXg6LTEsczp2b2lkIDB9fWZ1bmN0aW9uIGUoZyl7dGhpcy5iPXt9O3RoaXMuYT1iKCk7dGhpcy5zaXplPTA7aWYoZyl7Zz1wKGcpO2Zvcih2YXIgaDshKGg9Zy5uZXh0KCkpLmRvbmU7KWg9aC52YWx1ZSx0aGlzLnNldChoWzBdLGhbMV0pfX1pZihmdW5jdGlvbigpe2lmKCFhfHwnZnVuY3Rpb24nIT10eXBlb2YgYXx8IWEucHJvdG90eXBlLmVudHJpZXN8fCdmdW5jdGlvbichPXR5cGVvZiBPYmplY3Quc2VhbClyZXR1cm4hMTt0cnl7dmFyIGc9T2JqZWN0LnNlYWwoe3g6NH0pLGg9bmV3IGEocChbW2csJ3MnXV0pKTtpZigncychPWguZ2V0KGcpfHwxIT1oLnNpemV8fGguZ2V0KHt4OjR9KXx8aC5zZXQoe3g6NH0sJ3QnKSE9aHx8MiE9aC5zaXplKXJldHVybiExO3ZhciBrPWguZW50cmllcygpLG09ay5uZXh0KCk7aWYobS5kb25lfHxtLnZhbHVlWzBdIT1nfHwncychPW0udmFsdWVbMV0pcmV0dXJuITE7bT1rLm5leHQoKTtyZXR1cm4gbS5kb25lfHw0IT1tLnZhbHVlWzBdLnh8fAondCchPW0udmFsdWVbMV18fCFrLm5leHQoKS5kb25lPyExOiEwfWNhdGNoKHYpe3JldHVybiExfX0oKSlyZXR1cm4gYTt6KCk7dmFyIGY9bmV3IFdlYWtNYXA7ZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGcsaCl7Zz0wPT09Zz8wOmc7dmFyIGs9ZCh0aGlzLGcpO2subGlzdHx8KGsubGlzdD10aGlzLmJbay5pZF09W10pO2sucz9rLnMudmFsdWU9aDooay5zPXtuZXh0OnRoaXMuYSxBOnRoaXMuYS5BLGhlYWQ6dGhpcy5hLGtleTpnLHZhbHVlOmh9LGsubGlzdC5wdXNoKGsucyksdGhpcy5hLkEubmV4dD1rLnMsdGhpcy5hLkE9ay5zLHRoaXMuc2l6ZSsrKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGcpe2c9ZCh0aGlzLGcpO3JldHVybiBnLnMmJmcubGlzdD8oZy5saXN0LnNwbGljZShnLmluZGV4LDEpLGcubGlzdC5sZW5ndGh8fGRlbGV0ZSB0aGlzLmJbZy5pZF0sZy5zLkEubmV4dD1nLnMubmV4dCxnLnMubmV4dC5BPWcucy5BLGcucy5oZWFkPW51bGwsCnRoaXMuc2l6ZS0tLCEwKTohMX07ZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmI9e307dGhpcy5hPXRoaXMuYS5BPWIoKTt0aGlzLnNpemU9MH07ZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGcpe3JldHVybiEhZCh0aGlzLGcpLnN9O2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihnKXtyZXR1cm4oZz1kKHRoaXMsZykucykmJmcudmFsdWV9O2UucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLGZ1bmN0aW9uKGcpe3JldHVybltnLmtleSxnLnZhbHVlXX0pfTtlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihnKXtyZXR1cm4gZy5rZXl9KX07ZS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihnKXtyZXR1cm4gZy52YWx1ZX0pfTtlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGcsaCl7Zm9yKHZhciBrPXRoaXMuZW50cmllcygpLG07IShtPWsubmV4dCgpKS5kb25lOyltPQptLnZhbHVlLGcuY2FsbChoLG1bMV0sbVswXSx0aGlzKX07ZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1lLnByb3RvdHlwZS5lbnRyaWVzO3ZhciBsPTA7cmV0dXJuIGV9KTt5KCdPYmplY3QudmFsdWVzJyxmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3ZhciBjPVtdLGQ7Zm9yKGQgaW4gYil1KGIsZCkmJmMucHVzaChiW2RdKTtyZXR1cm4gY319KTsKeSgnU2V0JyxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGMpe3RoaXMuYT1uZXcgTWFwO2lmKGMpe2M9cChjKTtmb3IodmFyIGQ7IShkPWMubmV4dCgpKS5kb25lOyl0aGlzLmFkZChkLnZhbHVlKX10aGlzLnNpemU9dGhpcy5hLnNpemV9aWYoZnVuY3Rpb24oKXtpZighYXx8J2Z1bmN0aW9uJyE9dHlwZW9mIGF8fCFhLnByb3RvdHlwZS5lbnRyaWVzfHwnZnVuY3Rpb24nIT10eXBlb2YgT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBjPU9iamVjdC5zZWFsKHt4OjR9KSxkPW5ldyBhKHAoW2NdKSk7aWYoIWQuaGFzKGMpfHwxIT1kLnNpemV8fGQuYWRkKGMpIT1kfHwxIT1kLnNpemV8fGQuYWRkKHt4OjR9KSE9ZHx8MiE9ZC5zaXplKXJldHVybiExO3ZhciBlPWQuZW50cmllcygpLGY9ZS5uZXh0KCk7aWYoZi5kb25lfHxmLnZhbHVlWzBdIT1jfHxmLnZhbHVlWzFdIT1jKXJldHVybiExO2Y9ZS5uZXh0KCk7cmV0dXJuIGYuZG9uZXx8Zi52YWx1ZVswXT09Y3x8NCE9Zi52YWx1ZVswXS54fHwKZi52YWx1ZVsxXSE9Zi52YWx1ZVswXT8hMTplLm5leHQoKS5kb25lfWNhdGNoKGwpe3JldHVybiExfX0oKSlyZXR1cm4gYTt6KCk7Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGMpe2M9MD09PWM/MDpjO3RoaXMuYS5zZXQoYyxjKTt0aGlzLnNpemU9dGhpcy5hLnNpemU7cmV0dXJuIHRoaXN9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjKXtjPXRoaXMuYS5kZWxldGUoYyk7dGhpcy5zaXplPXRoaXMuYS5zaXplO3JldHVybiBjfTtiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuYS5jbGVhcigpO3RoaXMuc2l6ZT0wfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuYS5oYXMoYyl9O2IucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLmVudHJpZXMoKX07Yi5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS52YWx1ZXMoKX07Yi5wcm90b3R5cGUua2V5cz1iLnByb3RvdHlwZS52YWx1ZXM7CmIucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09Yi5wcm90b3R5cGUudmFsdWVzO2IucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYyxkKXt2YXIgZT10aGlzO3RoaXMuYS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3JldHVybiBjLmNhbGwoZCxmLGYsZSl9KX07cmV0dXJuIGJ9KTt5KCdPYmplY3QuaXMnLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj09PWM/MCE9PWJ8fDEvYj09PTEvYzpiIT09YiYmYyE9PWN9fSk7eSgnQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzJyxmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcztkIGluc3RhbmNlb2YgU3RyaW5nJiYoZD1TdHJpbmcoZCkpO3ZhciBlPWQubGVuZ3RoO2M9Y3x8MDtmb3IoMD5jJiYoYz1NYXRoLm1heChjK2UsMCkpO2M8ZTtjKyspe3ZhciBmPWRbY107aWYoZj09PWJ8fE9iamVjdC5pcyhmLGIpKXJldHVybiEwfXJldHVybiExfX0pOwp5KCdPYmplY3QuZW50cmllcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGIpdShiLGQpJiZjLnB1c2goW2QsYltkXV0pO3JldHVybiBjfX0pOwp2YXIgQT17cWE6J2xvYWRlZCcseGE6J3N0YXJ0JyxrYTonZmlyc3RRdWFydGlsZScsc2E6J21pZHBvaW50Jyx5YTondGhpcmRRdWFydGlsZScsaWE6J2NvbXBsZXRlJyx0YToncGF1c2UnLHZhOidyZXN1bWUnLGhhOididWZmZXJTdGFydCcsZ2E6J2J1ZmZlckZpbmlzaCcsd2E6J3NraXBwZWQnLEFhOid2b2x1bWVDaGFuZ2UnLHVhOidwbGF5ZXJTdGF0ZUNoYW5nZScsZGE6J2FkVXNlckludGVyYWN0aW9uJ30sbmE9e25hOidnZW5lcmljJyx6YTondmlkZW8nLHJhOidtZWRpYSd9LG9hPXtSOiduYXRpdmUnLG9hOidodG1sJyxQOidqYXZhc2NyaXB0J30scGE9e1I6J25hdGl2ZScsUDonamF2YXNjcmlwdCcsTk9ORTonbm9uZSd9LHJhPXttYTonZnVsbCcsamE6J2RvbWFpbicscGE6J2xpbWl0ZWQnfSxzYT17ZmE6J2JhY2tncm91bmRlZCcsbGE6J2ZvcmVncm91bmRlZCd9LHRhPXtlYTonYXBwJyxCYTond2ViJ307ZnVuY3Rpb24gQihhLGIpe3RoaXMueD1udWxsIT1hLng/YS54OmEubGVmdDt0aGlzLnk9bnVsbCE9YS55P2EueTphLnRvcDt0aGlzLndpZHRoPWEud2lkdGg7dGhpcy5oZWlnaHQ9YS5oZWlnaHQ7dGhpcy5lbmRYPXRoaXMueCt0aGlzLndpZHRoO3RoaXMuZW5kWT10aGlzLnkrdGhpcy5oZWlnaHQ7dGhpcy5hZFNlc3Npb25JZD1hLmFkU2Vzc2lvbklkfHx2b2lkIDA7dGhpcy5pc0ZyaWVuZGx5T2JzdHJ1Y3Rpb25Gb3I9YS5pc0ZyaWVuZGx5T2JzdHJ1Y3Rpb25Gb3J8fFtdO3RoaXMuYj1hLmZyaWVuZGx5T2JzdHJ1Y3Rpb25DbGFzc3x8dm9pZCAwO3RoaXMuYz1hLmZyaWVuZGx5T2JzdHJ1Y3Rpb25QdXJwb3NlfHx2b2lkIDA7dGhpcy5mPWEuZnJpZW5kbHlPYnN0cnVjdGlvblJlYXNvbnx8dm9pZCAwO3RoaXMuY2xpcHNUb0JvdW5kcz12b2lkIDAhPT1hLmNsaXBzVG9Cb3VuZHM/ITA9PT1hLmNsaXBzVG9Cb3VuZHM6ITA7dGhpcy5nPXZvaWQgMCE9PWEuaGFzV2luZG93Rm9jdXM/ITA9PT0KYS5oYXNXaW5kb3dGb2N1czohMDt0aGlzLm5vdFZpc2libGVSZWFzb249YS5ub3RWaXNpYmxlUmVhc29ufHx2b2lkIDA7dGhpcy5jaGlsZFZpZXdzPWEuY2hpbGRWaWV3c3x8W107dGhpcy5pc0NyZWF0aXZlPWEuaXNDcmVhdGl2ZXx8ITE7dGhpcy5hPWJ9ZnVuY3Rpb24gdWEoYSl7dmFyIGI9e307cmV0dXJuIGIud2lkdGg9YS53aWR0aCxiLmhlaWdodD1hLmhlaWdodCxifWZ1bmN0aW9uIEMoYSl7dmFyIGI9e307cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdWEoYSksKGIueD1hLngsYi55PWEueSxiKSl9ZnVuY3Rpb24gdmEoYSl7dmFyIGI9QyhhKSxjPXt9O3JldHVybiBPYmplY3QuYXNzaWduKHt9LGIsKGMuZW5kWD1hLmVuZFgsYy5lbmRZPWEuZW5kWSxjKSl9ZnVuY3Rpb24gd2EoYSxiLGMpe2EueCs9YjthLnkrPWM7YS5lbmRYKz1iO2EuZW5kWSs9Y30KQi5wcm90b3R5cGUuSj1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiExO2E9QyhhKTt2YXIgYj1hLnksYz1hLndpZHRoLGQ9YS5oZWlnaHQ7cmV0dXJuIHRoaXMueD09PWEueCYmdGhpcy55PT09YiYmdGhpcy53aWR0aD09PWMmJnRoaXMuaGVpZ2h0PT09ZH07ZnVuY3Rpb24geGEoYSl7cmV0dXJuIGEud2lkdGgqYS5oZWlnaHR9ZnVuY3Rpb24geWEoYSl7cmV0dXJuIDA9PT1hLndpZHRofHwwPT09YS5oZWlnaHR9O2Z1bmN0aW9uIHphKGEsYil7dmFyIGM9MDtpZigwPGIubGVuZ3RoKXt2YXIgZD1BYShhLGIpO2E9ZC5iYTtkPWQuY2E7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aC0xO2UrKylmb3IodmFyIGY9KGFbZV0rKGFbZV0rMSkpLzIsbD1hW2UrMV0tYVtlXSxnPTA7ZzxkLmxlbmd0aC0xO2crKyl7Zm9yKHZhciBoPShkW2ddKyhkW2ddKzEpKS8yLGs9ZFtnKzFdLWRbZ10sbT0hMSx2PTA7djxiLmxlbmd0aDt2Kyspe3ZhciB3PUMoYlt2XSk7aWYody54PGYmJncueCt3LndpZHRoPmYmJncueTxoJiZ3Lnkrdy5oZWlnaHQ+aCl7bT0hMDticmVha319bSYmKGMrPU1hdGgucm91bmQobCkqTWF0aC5yb3VuZChrKSl9fXJldHVybiBjfQpmdW5jdGlvbiBBYShhLGIpe2E9QyhhKTtmb3IodmFyIGM9W10sZD1bXSxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPUMoYltlXSk7Zj1CYShhLGYpO0NhKGMsZi54KTtDYShjLGYuZW5kWCk7Q2EoZCxmLnkpO0NhKGQsZi5lbmRZKX1jPWMuc29ydChmdW5jdGlvbihsLGcpe3JldHVybiBsLWd9KTtkPWQuc29ydChmdW5jdGlvbihsLGcpe3JldHVybiBsLWd9KTtyZXR1cm57YmE6YyxjYTpkfX1mdW5jdGlvbiBCYShhLGIpe3JldHVybnt4Ok1hdGgubWF4KGEueCxiLngpLHk6TWF0aC5tYXgoYS55LGIueSksZW5kWDpNYXRoLm1pbihhLngrYS53aWR0aCxiLngrYi53aWR0aCksZW5kWTpNYXRoLm1pbihhLnkrYS5oZWlnaHQsYi55K2IuaGVpZ2h0KX19ZnVuY3Rpb24gQ2EoYSxiKXstMT09PWEuaW5kZXhPZihiKSYmYS5wdXNoKGIpfTtmdW5jdGlvbiBEYSgpe3RoaXMuYj10aGlzLmE9dGhpcy52PXRoaXMubD10aGlzLmc9dGhpcy5qPXZvaWQgMDt0aGlzLm09MDt0aGlzLmg9W107dGhpcy5vPVtdO3RoaXMudT0wO3RoaXMuaT1bXTt0aGlzLmM9W107dGhpcy5mPVtdfURhLnByb3RvdHlwZS5KPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyExOkpTT04uc3RyaW5naWZ5KEVhKHRoaXMpKT09PUpTT04uc3RyaW5naWZ5KEVhKGEpKX07CmZ1bmN0aW9uIEVhKGEpe3ZhciBiPVtdLGM9W10sZD17dmlld3BvcnQ6YS5qLGFkVmlldzp7cGVyY2VudGFnZUluVmlldzphLm0scGl4ZWxzSW5WaWV3OmEudSxyZWFzb25zOmEuZn0sZGVjbGFyZWRGcmllbmRseU9ic3RydWN0aW9uczphLmgubGVuZ3RofTtpZih2b2lkIDAhPT1hLmEpe2QuYWRWaWV3Lmdlb21ldHJ5PUMoYS5hKTtkLmFkVmlldy5nZW9tZXRyeS5waXhlbHM9eGEoYS5hKTtkLmFkVmlldy5vblNjcmVlbkdlb21ldHJ5PUMoYS5iKTtkLmFkVmlldy5vblNjcmVlbkdlb21ldHJ5LnBpeGVscz1NYXRoLm1heCgwLHhhKGEuYiktemEoYS5iLGEuYykpO2Zvcih2YXIgZT0wO2U8YS5jLmxlbmd0aDtlKyspYi5wdXNoKEMoYS5jW2VdKSk7Zm9yKGU9MDtlPGEuby5sZW5ndGg7ZSsrKXt2YXIgZj1hLm9bZV0sbD1mLGc9e307bC5iJiYoZy5vYnN0cnVjdGlvbkNsYXNzPWwuYik7bC5jJiYoZy5vYnN0cnVjdGlvblB1cnBvc2U9bC5jKTtsLmYmJihnLm9ic3RydWN0aW9uUmVhc29uPQpsLmYpO2Y9QmEoYS5hLGYpO2MucHVzaChPYmplY3QuYXNzaWduKHt9LHt4OmYueCx5OmYueSx3aWR0aDpmLmVuZFgtZi54LGhlaWdodDpmLmVuZFktZi55fSxnKSl9ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5vYnN0cnVjdGlvbnM9YjtkLmFkVmlldy5vblNjcmVlbkdlb21ldHJ5LmZyaWVuZGx5T2JzdHJ1Y3Rpb25zPWM7dm9pZCAwIT09YS5sJiZ2b2lkIDAhPT1hLnYmJihkLmFkVmlldy5jb250YWluZXJHZW9tZXRyeT1DKGEubCksZC5hZFZpZXcub25TY3JlZW5Db250YWluZXJHZW9tZXRyeT1DKGEudiksZC5hZFZpZXcubWVhc3VyaW5nRWxlbWVudD0hMCl9cmV0dXJuIGR9ZnVuY3Rpb24gRmEoYSxiKXtiPXVhKGIpO2Euaj17fTthLmoud2lkdGg9Yi53aWR0aDthLmouaGVpZ2h0PWIuaGVpZ2h0O2EuZz17fTthLmcueD0wO2EuZy55PTA7YS5nLndpZHRoPWIud2lkdGg7YS5nLmhlaWdodD1iLmhlaWdodDthLmcuZW5kWD1iLndpZHRoO2EuZy5lbmRZPWIuaGVpZ2h0fQpmdW5jdGlvbiBHYSgpe3JldHVybnt4OjAseTowLGVuZFg6MCxlbmRZOjAsd2lkdGg6MCxoZWlnaHQ6MH19ZnVuY3Rpb24gSGEoYSxiKXt2YXIgYz17fTtjLng9TWF0aC5tYXgoYS54LGIueCk7Yy55PU1hdGgubWF4KGEueSxiLnkpO2MuZW5kWD1NYXRoLm1pbihhLmVuZFgsYi5lbmRYKTtjLmVuZFk9TWF0aC5taW4oYS5lbmRZLGIuZW5kWSk7Yy53aWR0aD1NYXRoLm1heCgwLGMuZW5kWC1jLngpO2MuaGVpZ2h0PU1hdGgubWF4KDAsYy5lbmRZLWMueSk7cmV0dXJuIGN9ZnVuY3Rpb24gSWEoYSxiKXtyZXR1cm4uMDE8Yi53aWR0aC1hLndpZHRofHwuMDE8Yi5oZWlnaHQtYS5oZWlnaHR9ZnVuY3Rpb24gSmEoYSl7aWYoLTEhPT1hLmYuaW5kZXhPZignYmFja2dyb3VuZGVkJykpYS5tPTAsYS51PTA7ZWxzZXt2YXIgYj14YShhLmEpO2lmKDAhPT1iKXt2YXIgYz1NYXRoLm1heCgwLHhhKGEuYiktemEoYS5iLGEuYykpO2EubT1NYXRoLnJvdW5kKGMvYioxMDApO2EudT1jfX19CmZ1bmN0aW9uIEthKGEsYil7aWYoeWEoYil8fCFhLmIpYj0hMTtlbHNle3ZhciBjPXZhKGEuYiksZD1jLnksZT1jLmVuZFg7YT1jLmVuZFk7dmFyIGY9Yi5lbmRYO2M9Yy54OyhmPWY8Y3x8LjAxPk1hdGguYWJzKGYtYykpfHwoZj1iLngsZj1mPmV8fC4wMT5NYXRoLmFicyhmLWUpKTsoZT1mKXx8KGU9Yi5lbmRZLGU9ZTxkfHwuMDE+TWF0aC5hYnMoZS1kKSk7KGQ9ZSl8fChiPWIueSxkPWI+YXx8LjAxPk1hdGguYWJzKGItYSkpO2I9IWR9cmV0dXJuIGJ9ZnVuY3Rpb24gRChhLGIpe2Zvcih2YXIgYz0hMSxkPTA7ZDxhLmYubGVuZ3RoO2QrKylhLmZbZF09PT1iJiYoYz0hMCk7Y3x8YS5mLnB1c2goYil9O2Z1bmN0aW9uIExhKGEsYixjLGQsZSl7dmFyIGY9bmV3IERhO2I9bmV3IEIoYiwhMSk7RmEoZixiKTtNYShhLGIsZixkKTtpZighZSlyZXR1cm4gZi5mPVsndW5tZWFzdXJhYmxlJ10sZi5qPXZvaWQgMCxmLm09MCxmLmM9W10sZi5hJiYoYT1mLmEsYz17fSxhPW5ldyBCKChjLng9MCxjLnk9MCxjLndpZHRoPWEud2lkdGgsYy5oZWlnaHQ9YS5oZWlnaHQsYyksYS5hKSxmLmE9YSksZi5iPUdhKCksZjtpZignYmFja2dyb3VuZGVkJz09PWMpRChmLCdiYWNrZ3JvdW5kZWQnKTtlbHNlIGlmKHZvaWQgMCE9PWYuYSl7Zm9yKGE9MDthPGYuaC5sZW5ndGg7YSsrKUthKGYsZi5oW2FdKSYmZi5vLnB1c2goZi5oW2FdKTtmb3IoYT0wO2E8Zi5pLmxlbmd0aDthKyspe2lmKGM9S2EoZixmLmlbYV0pKXthOntjPWYuaVthXTtmb3IoZD0wO2Q8Zi5jLmxlbmd0aDtkKyspaWYoZi5jW2RdLkooYykpe2M9ITA7YnJlYWsgYX1jPSExfWM9IWN9YyYmKEQoZiwnb2JzdHJ1Y3RlZCcpLGYuYy5wdXNoKGYuaVthXSkpfUphKGYpfWVsc2UgRChmLAonbm90Rm91bmQnKTtyZXR1cm4gZn0KZnVuY3Rpb24gTWEoYSxiLGMsZCl7dmFyIGU9Yi5pc0NyZWF0aXZlPyEwOmIuYWRTZXNzaW9uSWQ9PT1kO2lmKGUpe2MuYT1iO3ZhciBmPXZhKGMuYSk7YT1IYShjLmcsZik7dmFyIGw9Yy5hOydub3RBdHRhY2hlZCc9PT1sLm5vdFZpc2libGVSZWFzb258fCdub1dpbmRvd0ZvY3VzJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J25vQWRWaWV3Jz09PWwubm90VmlzaWJsZVJlYXNvbj8oRChjLCdub3RGb3VuZCcpLGMuYj1uZXcgQihHYSgpLCExKSk6KGw9Yy5hLCd2aWV3SW52aXNpYmxlJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdHb25lJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdOb3RWaXNpYmxlJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdBbHBoYVplcm8nPT09bC5ub3RWaXNpYmxlUmVhc29ufHwndmlld0hpZGRlbic9PT1sLm5vdFZpc2libGVSZWFzb258fHZvaWQgMCE9PWMuYS5ub3RWaXNpYmxlUmVhc29ufHx5YShjLmEpPyhEKGMsJ2hpZGRlbicpLGMuYj1uZXcgQihHYSgpLAohMSkpOihjLmEuZ3x8KEQoYywnYmFja2dyb3VuZGVkJyksRChjLCdub1dpbmRvd0ZvY3VzJykpLElhKGEsZikmJkQoYywnY2xpcHBlZCcpLGMuYj1uZXcgQihhLCExKSkpfWVsc2UgaWYoZj0hMCxiLmEmJihmPS0xIT09Yi5pc0ZyaWVuZGx5T2JzdHJ1Y3Rpb25Gb3IuaW5kZXhPZihkKT8hMTohMT09PWIuY2xpcHNUb0JvdW5kcyksZil7bD1iLmNoaWxkVmlld3M7Zm9yKHZhciBnPTA7ZzxsLmxlbmd0aDtnKyspZj12b2lkIDAhPT1jLmEsTWEoYSxuZXcgQihsW2ddLGYpLGMsZCl9ZXx8dm9pZCAwPT09Yy5hfHwoYi5hPy0xIT09Yi5pc0ZyaWVuZGx5T2JzdHJ1Y3Rpb25Gb3IuaW5kZXhPZihkKT9jLmgucHVzaChiKTpjLmkucHVzaChiKTooZT12YShiKSxkPXZhKGMuYiksQyhjLmIpLCF5YShjLmIpJiZiLmNsaXBzVG9Cb3VuZHMmJihiPUhhKGQsZSksSWEoYixkKSYmKEQoYywnY2xpcHBlZCcpLGMuYj1uZXcgQihiLCExKSkpKSl9O2Z1bmN0aW9uIE5hKGEsYil7dGhpcy55PXRoaXMueD0wO3RoaXMud2lkdGg9YTt0aGlzLmhlaWdodD1ifTtmdW5jdGlvbiBPYSgpe3JldHVybnthcGlWZXJzaW9uOicxLjAnLGFjY2Vzc01vZGU6J2xpbWl0ZWQnLGVudmlyb25tZW50OidhcHAnLG9taWRKc0luZm86e29taWRJbXBsZW1lbnRlcjonb21zZGsnLHNlcnZpY2VWZXJzaW9uOicxLjMuMjUtaWFiMzE2Nyd9fX1mdW5jdGlvbiBQYSgpe3RoaXMuYWRTZXNzaW9uSWQ9bnVsbDt0aGlzLmM9T2EoKTt0aGlzLm89bnVsbDt0aGlzLm09J2ZvcmVncm91bmRlZCc7dGhpcy5sPXRoaXMuaT0nbm9uZSc7dGhpcy5qPXRoaXMuZz10aGlzLmY9dGhpcy5oPXRoaXMuYT10aGlzLmI9dGhpcy5CPXRoaXMudT1udWxsO3RoaXMuQz0hMDt0aGlzLnY9bmV3IE1hcH12YXIgRztmdW5jdGlvbiBIKCl7R3x8KEc9bmV3IFBhKTtyZXR1cm4gR307dmFyIEk9ZnVuY3Rpb24oKXtpZigndW5kZWZpbmVkJyE9PXR5cGVvZiBvbWlkR2xvYmFsJiZvbWlkR2xvYmFsKXJldHVybiBvbWlkR2xvYmFsO2lmKCd1bmRlZmluZWQnIT09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsKXJldHVybiBnbG9iYWw7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpcmV0dXJuIHdpbmRvdztpZigndW5kZWZpbmVkJyE9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3ZhciBhPUZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7aWYoYSlyZXR1cm4gYTt0aHJvdyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSBnbG9iYWwgb2JqZWN0IGNvbnRleHQuJyk7fSgpO2Z1bmN0aW9uIFFhKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9dC5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhRYS5wcm90b3R5cGUse2V2ZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfX0sb3JpZ2luOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ifX19KTtmdW5jdGlvbiBKKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtSYShmdW5jdGlvbigpe3Rocm93IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoRXJyb3IsW251bGwsJ0NvdWxkIG5vdCBjb21wbGV0ZSB0aGUgdGVzdCBzdWNjZXNzZnVsbHkgLSAnXS5jb25jYXQocShiKSkpKTt9LGZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxxKGIpKX0pfWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtSYShmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLHEoYikpfSl9CmZ1bmN0aW9uIFJhKGEsYil7J3VuZGVmaW5lZCchPT10eXBlb2YgamFzbWluZSYmamFzbWluZT9hKCk6J3VuZGVmaW5lZCchPT10eXBlb2YgY29uc29sZSYmY29uc29sZSYmY29uc29sZS5lcnJvciYmYigpfTtmdW5jdGlvbiBUYSgpe3RoaXMuZj1bXTt0aGlzLmI9W107dGhpcy5jPVtdO3RoaXMuZz1bXTt0aGlzLmk9e307dGhpcy5hPUgoKX1mdW5jdGlvbiBVYShhKXthLmY9W107YS5iPVtdO2EuYz1bXTthLmc9W107YS5pPXt9O0cuYWRTZXNzaW9uSWQ9bnVsbDtHLmM9T2EoKTtHLm89bnVsbDtHLkc9dm9pZCAwO0cuSz12b2lkIDA7Ry5IPW51bGw7Ry5JPW51bGw7Ry5EPW51bGw7Ry5tPSdmb3JlZ3JvdW5kZWQnO0cuaT0nbm9uZSc7Ry5sPSdub25lJztHLnU9bnVsbDtHLkI9bnVsbDtHLmI9bnVsbDtHLmE9bnVsbDtHLmg9bnVsbDtHLmY9bnVsbDtHLmc9bnVsbDtHLmo9bnVsbDtHLkM9ITA7Ry52PW5ldyBNYXB9CmZ1bmN0aW9uIFZhKGEsYil7dm9pZCAwIT09YS5hJiZhLmEuYWRTZXNzaW9uSWQmJiExIT09V2EoYSxiKSYmYS5jLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy50eXBlPT09Yi5ldmVudC50eXBlfSkuZm9yRWFjaChmdW5jdGlvbihjKXtyZXR1cm4gYS5oKGMuRixiLmV2ZW50KX0pfWZ1bmN0aW9uIFhhKGEsYil7YS5mLnB1c2goYik7VmEoYSxiKX1mdW5jdGlvbiBZYShhLGIsYyl7dm9pZCAwIT09YS5hJiZhLmEuYWRTZXNzaW9uSWQmJmEuZi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGQuZXZlbnQudHlwZT09PWImJldhKGEsZCl9KS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIGQuZXZlbnR9KS5mb3JFYWNoKGMpfQpmdW5jdGlvbiBXYShhLGIpe3ZhciBjPWIuZXZlbnQudHlwZSxkPS0xIT09T2JqZWN0LnZhbHVlcyhBKS5pbmRleE9mKGMpJiYndm9sdW1lQ2hhbmdlJyE9PWM7cmV0dXJuJ2ltcHJlc3Npb24nPT09Y3x8J2xvYWRlZCc9PT1jJiZhLmEuYT9iLm9yaWdpbj09PUgoKS5sOmQ/Yi5vcmlnaW49PT1IKCkuaTohMH1mdW5jdGlvbiBaYShhLGIsYyl7J21lZGlhJz09PWJ8fCd2aWRlbyc9PT1iPyRhKGEsYyk6KGEuYy5wdXNoKHt0eXBlOmIsRjpjfSksWWEoYSxiLGMpKX1mdW5jdGlvbiAkYShhLGIpe09iamVjdC5rZXlzKEEpLmZvckVhY2goZnVuY3Rpb24oYyl7Yz1BW2NdO2EuYy5wdXNoKHt0eXBlOmMsRjpifSk7WWEoYSxjLGIpfSl9ZnVuY3Rpb24gYWIoYSxiLGMsZCl7dmFyIGU9e086YyxMOmQsRjpifTthLmcucHVzaChlKTthLmIuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgbD1iYihmKTsnc2Vzc2lvblN0YXJ0Jz09PWYuZXZlbnQudHlwZSYmY2IoYSxsLGUpO2EuaChiLGwpfSl9CmZ1bmN0aW9uIGRiKGEsYixjKXt2YXIgZD1LKGEsJ3Nlc3Npb25FcnJvcicsJ25hdGl2ZScse2Vycm9yVHlwZTpiLG1lc3NhZ2U6Y30pO2EuYi5wdXNoKGQpO2EuZy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EuaChlLkYsZC5ldmVudCl9KX1mdW5jdGlvbiBlYihhLGIpe2EuaT1PYmplY3QuYXNzaWduKGEuaSxiKTtiPWEuYS5jO2lmKHZvaWQgMCE9PWIpe2I9T2JqZWN0LmFzc2lnbih7fSxmYihhLGdiKGEse2NvbnRleHQ6Yn0pLCEwKSx7c3VwcG9ydHNMb2FkZWRFdmVudDohIWEuYS5hfHwndmlkZW8nPT1hLmEuYn0pO09iamVjdC5hc3NpZ24oYix7cGFnZVVybDpudWxsLGNvbnRlbnRVcmw6YS5hLm99KTt2YXIgYz1LKGEsJ3Nlc3Npb25TdGFydCcsJ25hdGl2ZScsYik7YS5iLnB1c2goYyk7YS5nLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGU9ZC5GLGY9YmIoYyk7Y2IoYSxmLGQpO2EuaChlLGYpfSxhKTtoYihhKX19CmZ1bmN0aW9uIGNiKGEsYixjKXtjLk8mJihiLmRhdGEudmVyaWZpY2F0aW9uUGFyYW1ldGVycz1hLmlbYy5PXSk7Yy5MJiYoYz1hLmEudi5nZXQoYy5MKSkmJihiLmRhdGEudmVyaWZpY2F0aW9uUGFyYW1ldGVycz1jLnZlcmlmaWNhdGlvblBhcmFtZXRlcnMsYi5kYXRhLmNvbnRleHQuYWNjZXNzTW9kZT1jLmFjY2Vzc01vZGUsJ2Z1bGwnPT09Yy5hY2Nlc3NNb2RlJiYoYS5hLmcmJihiLmRhdGEuY29udGV4dC52aWRlb0VsZW1lbnQ9YS5hLmcpLGEuYS5mJiYoYi5kYXRhLmNvbnRleHQuc2xvdEVsZW1lbnQ9YS5hLmYpKSl9ZnVuY3Rpb24gaWIoYSl7dmFyIGI9YS5nLGM9SyhhLCdzZXNzaW9uRmluaXNoJywnbmF0aXZlJyk7YS5iLnB1c2goYyk7dmFyIGQ9YS5hLmM7ZCYmJ25hdGl2ZSc9PWQuYWRTZXNzaW9uVHlwZXx8VWEoYSk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhLmgoZS5GLGMuZXZlbnQpfSl9ClRhLnByb3RvdHlwZS5oPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZC0xXT1hcmd1bWVudHNbZF07dHJ5e2EuYXBwbHkobnVsbCxxKGMpKX1jYXRjaChlKXtTYShlKX19O2Z1bmN0aW9uIGpiKGEsYil7dmFyIGM9KGM9SCgpLkQpP0VhKGMpOnZvaWQgMDtjPWZiKGEsZ2IoYSxjKSk7WGEoYSxLKGEsJ2ltcHJlc3Npb24nLGIsYykpfWZ1bmN0aW9uIGtiKGEsYixjKXtpZihhLmEuYXx8J2Rpc3BsYXknIT1hLmEuYiliPUsoYSwnbG9hZGVkJyxiLGZiKGEsZ2IoYSx2b2lkIDA9PT1jP251bGw6YykpKSxYYShhLGIpfQpmdW5jdGlvbiBsYihhLGIsYyxkKXsnc3RhcnQnIT09YiYmJ3ZvbHVtZUNoYW5nZSchPT1ifHxudWxsIT0oZCYmZC5kZXZpY2VWb2x1bWUpfHwoZC5kZXZpY2VWb2x1bWU9YS5hLnUpO2lmKGQmJignc3RhcnQnPT09Ynx8J3ZvbHVtZUNoYW5nZSc9PT1iKSl7dmFyIGU9ZC52aWRlb1BsYXllclZvbHVtZSxmPWQubWVkaWFQbGF5ZXJWb2x1bWU7bnVsbCE9ZT8oT2JqZWN0LmFzc2lnbihkLHttZWRpYVBsYXllclZvbHVtZTplfSksYS5hLkI9ZSk6bnVsbCE9ZiYmKE9iamVjdC5hc3NpZ24oZCx7dmlkZW9QbGF5ZXJWb2x1bWU6Zn0pLGEuYS5CPWYpfVhhKGEsSyhhLGIsYyxkKSl9CmZ1bmN0aW9uIGhiKGEpe3ZhciBiPWEuZi5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIE9iamVjdC52YWx1ZXMoQSkuaW5jbHVkZXMoZi5ldmVudC50eXBlKSYmJ3ZpZGVvJz09YS5hLmImJmYub3JpZ2luPT09YS5hLml8fCdsb2FkZWQnPT1mLmV2ZW50LnR5cGUmJidkaXNwbGF5Jz09YS5hLmImJmYub3JpZ2luPT09YS5hLmw/ITA6ITF9KS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuZXZlbnR9KSxjPWEuYS5hZFNlc3Npb25JZHx8JycsZD17fTtiPXAoYik7Zm9yKHZhciBlPWIubmV4dCgpOyFlLmRvbmU7ZD17dzpkLnd9LGU9Yi5uZXh0KCkpe2Qudz1lLnZhbHVlO2Qudy5hZFNlc3Npb25JZHx8KGQudy5hZFNlc3Npb25JZD1jKTtpZignbG9hZGVkJz09ZC53LnR5cGUpe2lmKCFhLmEuYSYmJ2Rpc3BsYXknPT1hLmEuYiljb250aW51ZTtkLncuZGF0YT1mYihhLGdiKGEsZC53LmRhdGEpKX1hLmMuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC50eXBlPT09CmYudy50eXBlfX0oZCkpLmZvckVhY2goZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLkYoZi53KX19KGQpKX19ZnVuY3Rpb24gbWIoYSxiLGMpe2E6e2M9bmV3IFNldChjKTthPXAoYS5mLmNvbmNhdChhLmIpKTtmb3IodmFyIGQ9YS5uZXh0KCk7IWQuZG9uZTtkPWEubmV4dCgpKWlmKGQ9ZC52YWx1ZSxjLmhhcyhkLmV2ZW50LnR5cGUpJiZkLm9yaWdpbiE9Yil7Yj0hMDticmVhayBhfWI9ITF9cmV0dXJuIGI/KEooJ0V2ZW50IG93bmVyIGNhbm5vdCBiZSByZWdpc3RlcmVkIGFmdGVyIGl0cyBldmVudHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHVibGlzaGVkLicpLCExKTohMH1mdW5jdGlvbiBuYihhLGIpe21iKGEsYixPYmplY3QudmFsdWVzKEEpKSYmTChhLGIpJiYoYS5hLmk9Yil9ZnVuY3Rpb24gb2IoYSxiKXttYihhLGIsWydpbXByZXNzaW9uJ10pJiZwYihhLGIpJiYoYS5hLmw9Yil9CmZ1bmN0aW9uIHBiKGEsYil7dmFyIGM9YS5hLmw7cmV0dXJuJ25vbmUnIT1jJiZjIT1iPyhKKCdJbXByZXNzaW9uIGV2ZW50IGlzIG93bmVkIGJ5ICcrKGEuYS5sKycsIG5vdCAnKSsoYisnLicpKSwhMSk6ITB9ZnVuY3Rpb24gTChhLGIpe3ZhciBjPWEuYS5pO3JldHVybidub25lJyE9YyYmYyE9Yj8oSignTWVkaWEgZXZlbnRzIGFyZSBvd25lZCBieSAnKyhhLmEuaSsnLCBub3QgJytiKycuJykpLCExKTohMH1mdW5jdGlvbiBmYihhLGIsYyl7Yz12b2lkIDA9PT1jPyExOmM7Yj1PYmplY3QuYXNzaWduKHt9LGIpO2EuYS5iJiZPYmplY3QuYXNzaWduKGIse21lZGlhVHlwZTphLmEuYn0pO2EuYS5hJiYoY3x8J2RlZmluZWRCeUphdmFTY3JpcHQnIT09YS5hLmEpJiZPYmplY3QuYXNzaWduKGIse2NyZWF0aXZlVHlwZTphLmEuYX0pO3JldHVybiBifWZ1bmN0aW9uIGdiKGEsYil7cmV0dXJuIGEuYS5oP09iamVjdC5hc3NpZ24oe30sYix7aW1wcmVzc2lvblR5cGU6YS5hLmh9KTpifQpmdW5jdGlvbiBLKGEsYixjLGQpe3JldHVybiBuZXcgUWEoe2FkU2Vzc2lvbklkOmEuYS5hZFNlc3Npb25JZHx8JycsdGltZXN0YW1wOihuZXcgRGF0ZSkuZ2V0VGltZSgpLHR5cGU6YixkYXRhOmR9LGMpfWZ1bmN0aW9uIGJiKGEpe2E9YS5ldmVudDtyZXR1cm57YWRTZXNzaW9uSWQ6YS5hZFNlc3Npb25JZCx0aW1lc3RhbXA6YS50aW1lc3RhbXAsdHlwZTphLnR5cGUsZGF0YTphLmRhdGF9fTtmdW5jdGlvbiBxYihhLGIsYyl7J2NvbnRhaW5lcic9PT1iJiZ2b2lkIDAhPT1hLmEuRyYmdm9pZCAwIT09YS5hJiZudWxsIT1hLmEuYWRTZXNzaW9uSWQmJihhLmEuSD1MYShhLmMsYS5hLkcsYS5hLm0sYS5hLmFkU2Vzc2lvbklkLCEwKSk7Yj1hLmE7dmFyIGQ9Yi5ILGU9Yi5JO2lmKGQpaWYoZSl7Yj1uZXcgRGE7dmFyIGY9ZC5qLGw9ZC5hLGc9ZC5iLGg9ZS5hLGs9ZS5iO2YmJmwmJmcmJmgmJmsmJihGYShiLGYpLGIubD1uZXcgQihsLCExKSxiLnY9bmV3IEIoZywhMSksYi5pPU9iamVjdC5hc3NpZ24oW10sZC5pKSxiLmM9T2JqZWN0LmFzc2lnbihbXSxkLmMpLGIuaD1PYmplY3QuYXNzaWduKFtdLGQuaCksYi5vPU9iamVjdC5hc3NpZ24oW10sZC5vKSxiLmY9T2JqZWN0LmFzc2lnbihbXSxlLmYsZC5mKSxkPWIubC54LGU9Yi5sLnksaD1uZXcgQihoLCExKSxrPW5ldyBCKGssITEpLHdhKGgsZCxlKSx3YShrLGQsZSksYi5hPWgsYi5iPUhhKGssZyksSmEoYikpfWVsc2UgYj1kO2Vsc2UgYj0KbnVsbDtnPWEuYS5EO2lmKGImJiFiLkooZyl8fGMpZz1FYShiKSxjJiYoZy5hZFZpZXcucmVhc29ucz1nLmFkVmlldy5yZWFzb25zfHxbY10pLGM9YS5iLCdhdWRpbychPWMuYS5hJiZYYShjLEsoYywnZ2VvbWV0cnlDaGFuZ2UnLCduYXRpdmUnLGcpKSxhLmEuRD1ifTtmdW5jdGlvbiBNKGEpe3JldHVybidvYmplY3QnPT09dHlwZW9mIGF9ZnVuY3Rpb24gcmIoYSl7cmV0dXJuJ251bWJlcic9PT10eXBlb2YgYSYmIWlzTmFOKGEpJiYwPD1hfWZ1bmN0aW9uIE4oYSl7cmV0dXJuJ3N0cmluZyc9PT10eXBlb2YgYX1mdW5jdGlvbiBPKGEsYil7cmV0dXJuIE4oYSkmJi0xIT09T2JqZWN0LnZhbHVlcyhiKS5pbmRleE9mKGEpfWZ1bmN0aW9uIHNiKGEpe3ZhciBiPWEmJmEudGFnTmFtZSYmJ2lmcmFtZSc9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt0cnl7Yj1iJiZhIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnR9Y2F0Y2goYyl7fXJldHVybiBifWZ1bmN0aW9uIHRiKGEpe3ZhciBiPWEmJmEudGFnTmFtZTt0cnl7Yj1iJiZhIGluc3RhbmNlb2YgYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50fWNhdGNoKGMpe31yZXR1cm4gYn0KZnVuY3Rpb24gdWIoYSl7dmFyIGI9YSYmYS50YWdOYW1lJiYndmlkZW8nPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7dHJ5e2I9YiYmYSBpbnN0YW5jZW9mIGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MVmlkZW9FbGVtZW50fWNhdGNoKGMpe31yZXR1cm4gYn07ZnVuY3Rpb24gUChhLGIsYyl7dGhpcy5mPWE7dGhpcy5LPWI7dGhpcy5HPWM7dGhpcy5jPUgoKTt0aGlzLmI9bnVsbDt0aGlzLmE9dGhpcy5nPXRoaXMudT12b2lkIDA7dGhpcy5JPSEwO3RoaXMuQj12b2lkIDA7USh0aGlzKX1mdW5jdGlvbiBRKGEpe2lmKCFhLmIpe3ZhciBiO2E6e2lmKChiPWEuZi5kb2N1bWVudCkmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmKGI9Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvbWlkLWVsZW1lbnQnKSkpe2lmKDE9PWIubGVuZ3RoKXtiPWJbMF07YnJlYWsgYX0xPGIubGVuZ3RoJiZhLkkmJihkYihhLkcsJ2dlbmVyaWMnLCJNb3JlIHRoYW4gb25lIGVsZW1lbnQgd2l0aCAnb21pZC1lbGVtZW50JyBjbGFzcyBuYW1lLiIpLGEuST0hMSl9Yj1udWxsfWlmKHViKGIpKWEuYy5nPWI7ZWxzZSBpZih0YihiKSlhLmMuZj1iO2Vsc2UgcmV0dXJuO3ZiKGEpfX0KZnVuY3Rpb24gdmIoYSl7YS5jLmc/KGEuYj1hLmMuZyxhLmkoKSk6YS5jLmYmJihhLmI9YS5jLmYsc2IoYS5iKT9hLmMuaiYmYS5pKCk6YS5pKCkpfWZ1bmN0aW9uIHdiKGEpe2EuYSYmKHNiKGEuYik/YS5jLmomJihhLkQoKSx4YihhKSk6KGEuRCgpLHhiKGEpKSl9UC5wcm90b3R5cGUubT1mdW5jdGlvbigpe3RoaXMuQiYmKHRoaXMuZi5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJyx0aGlzLkIpLHRoaXMuQj12b2lkIDApfTtQLnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiB4YihhKXthLnUmJihhLmMuST1hLnUscWIoYS5LLCdjcmVhdGl2ZScpKX1mdW5jdGlvbiB5YihhKXtpZihhLmEmJmEuYy5qKXt2YXIgYj1uZXcgQihhLmMuaiwhMSk7d2EoYixhLmEueCxhLmEueSk7Yi5jbGlwc1RvQm91bmRzPSEwO3JldHVybiBifX07ZnVuY3Rpb24gemIoYSxiLGMpe3JldHVybiBBYihhLCdzZXRJbnRlcnZhbCcpKGIsYyl9ZnVuY3Rpb24gQmIoYSxiKXtBYihhLCdjbGVhckludGVydmFsJykoYil9ZnVuY3Rpb24gQ2IoYSxiKXtBYihhLCdjbGVhclRpbWVvdXQnKShiKX1mdW5jdGlvbiBBYihhLGIpe3JldHVybiBhLmEmJmEuYVtiXT9hLmFbYl06RGIoYSxiKX0KZnVuY3Rpb24gRWIoYSxiLGMsZCl7aWYoYS5hLmRvY3VtZW50JiZhLmEuZG9jdW1lbnQuYm9keSl7dmFyIGU9YS5hLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO2Uud2lkdGg9MTtlLmhlaWdodD0xO2Uuc3R5bGUuZGlzcGxheT0nbm9uZSc7ZS5zcmM9YjtjJiZlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGZ1bmN0aW9uKCl7cmV0dXJuIGMoKX0pO2QmJmUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLGZ1bmN0aW9uKCl7cmV0dXJuIGQoKX0pO2EuYS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpfWVsc2UgRGIoYSwnc2VuZFVybCcpKGIsYyxkKX1mdW5jdGlvbiBEYihhLGIpe2lmKGEuYSYmYS5hLm9taWROYXRpdmUmJmEuYS5vbWlkTmF0aXZlW2JdKXJldHVybiBhLmEub21pZE5hdGl2ZVtiXS5iaW5kKGEuYS5vbWlkTmF0aXZlKTt0aHJvdyBFcnJvcignTmF0aXZlIGludGVyZmFjZSBtZXRob2QgIicrYisnIiBub3QgZm91bmQuJyk7fTtmdW5jdGlvbiBSKGEsYixjLGQsZSl7UC5jYWxsKHRoaXMsYSxjLGUpO3RoaXMubD1iO3RoaXMuaD12b2lkIDA7dGhpcy5qPWR9cihSLFApO1IucHJvdG90eXBlLm09ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLmgmJihCYih0aGlzLmosdGhpcy5oKSx0aGlzLmg9dm9pZCAwKTtQLnByb3RvdHlwZS5tLmNhbGwodGhpcyl9O1IucHJvdG90eXBlLmk9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO1AucHJvdG90eXBlLmkuY2FsbCh0aGlzKTtudWxsPT10aGlzLmI/dGhpcy5oPXZvaWQgMDp2b2lkIDA9PT10aGlzLmgmJih0aGlzLmg9emIodGhpcy5qLGZ1bmN0aW9uKCl7cmV0dXJuIEZiKGEpfSwyMDApLEZiKHRoaXMpKX07ClIucHJvdG90eXBlLkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmcpe3ZhciBhPXliKHRoaXMpO2lmKGEpe3RoaXMuYS5pc0NyZWF0aXZlPSExO2EuaXNDcmVhdGl2ZT0hMDtmb3IodmFyIGI9ITEsYz0wO2M8dGhpcy5hLmNoaWxkVmlld3MubGVuZ3RoO2MrKylpZih0aGlzLmEuY2hpbGRWaWV3c1tjXS5pc0NyZWF0aXZlKXt0aGlzLmEuY2hpbGRWaWV3c1tjXT1hO2I9ITA7YnJlYWt9Ynx8dGhpcy5hLmNoaWxkVmlld3MucHVzaChhKX1lbHNlIHRoaXMuYS5pc0NyZWF0aXZlPSEwO3RoaXMudT1MYSh0aGlzLmwsdGhpcy5nLHRoaXMuYy5tLHRoaXMuYy5hZFNlc3Npb25JZCx0aGlzLkMoKSl9fTtSLnByb3RvdHlwZS5DPWZ1bmN0aW9uKCl7cmV0dXJuITB9OwpmdW5jdGlvbiBGYihhKXtpZih2b2lkIDAhPT1hLmgpe2I6e3RyeXt2YXIgYj1hLmYudG9wO3ZhciBjPTA8PWIuaW5uZXJIZWlnaHQmJjA8PWIuaW5uZXJXaWR0aDticmVhayBifWNhdGNoKGQpe31jPSExfWM/KGM9YS5mLnRvcCxjPW5ldyBCKG5ldyBOYShjLmlubmVyV2lkdGgsYy5pbm5lckhlaWdodCksITEpKTpjPW5ldyBCKG5ldyBOYSgwLDApLCExKTtiPWEuYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihudWxsPT1iLnh8fGlzTmFOKGIueCkpYi54PWIubGVmdDtpZihudWxsPT1iLnl8fGlzTmFOKGIueSkpYi55PWIudG9wO2I9bmV3IEIoYiwhMSk7Yy5KKGEuZykmJmIuSihhLmEpfHwoYS5hPWIsYS5hLmNsaXBzVG9Cb3VuZHM9ITAsYS5nPWMsYS5nLmNoaWxkVmlld3MucHVzaChhLmEpLHdiKGEpKX19O2Z1bmN0aW9uIFMoYSxiLGMsZCl7UC5jYWxsKHRoaXMsYSxjLGQpO3RoaXMubz10aGlzLmo9dGhpcy5sPXRoaXMuaD12b2lkIDA7dGhpcy5IPSExO3RoaXMudj12b2lkIDB9cihTLFApO1MucHJvdG90eXBlLm09ZnVuY3Rpb24oKXt0aGlzLmgmJnRoaXMuaC5kaXNjb25uZWN0KCk7R2IodGhpcyk7UC5wcm90b3R5cGUubS5jYWxsKHRoaXMpfTtTLnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7UC5wcm90b3R5cGUuaS5jYWxsKHRoaXMpO3RoaXMuYiYmKHRoaXMuaHx8KHRoaXMuaD1IYih0aGlzKSksSWIodGhpcyksSmIodGhpcy5iKSYmS2IodGhpcykpfTsKUy5wcm90b3R5cGUuRD1mdW5jdGlvbigpe2lmKHRoaXMuYSYmdGhpcy52KXt2YXIgYT15Yih0aGlzKTtpZihhKXt2YXIgYj1hO3ZhciBjPXRoaXMudjt2YXIgZD1NYXRoLm1heChhLngsYy54KTt2YXIgZT1NYXRoLm1heChhLnksYy55KSxmPU1hdGgubWluKGEuZW5kWCxjLmVuZFgpO2E9TWF0aC5taW4oYS5lbmRZLGMuZW5kWSk7Zjw9ZHx8YTw9ZT9kPW51bGw6KGM9e30sZD1uZXcgQigoYy54PWQsYy55PWUsYy53aWR0aD1NYXRoLmFicyhmLWQpLGMuaGVpZ2h0PU1hdGguYWJzKGEtZSksYyksITEpKTtkfHwoZD1uZXcgQih7eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSwhMSkpfWVsc2UgYj10aGlzLmEsZD10aGlzLnY7ZT1uZXcgRGE7dGhpcy5nJiZGYShlLHRoaXMuZyk7ZS5hPWI7ZS5iPWQ7SmEoZSk7dGhpcy5IP3lhKGUuYSk/RChlLCdoaWRkZW4nKToxMDA9PT1lLm18fEQoZSwnY2xpcHBlZCcpOkQoZSwndmlld3BvcnQnKTt0aGlzLnU9ZX19O1MucHJvdG90eXBlLkM9ZnVuY3Rpb24oKXtyZXR1cm4hMH07CmZ1bmN0aW9uIEdiKGEpe2EubCYmKGEubC5kaXNjb25uZWN0KCksYS5sPXZvaWQgMCk7YS5qJiYoYS5qLmRpc2Nvbm5lY3QoKSxhLmo9dm9pZCAwKTthLm8mJigoMCxhLmYucmVtb3ZlRXZlbnRMaXN0ZW5lcikoJ3Jlc2l6ZScsYS5vKSxhLm89dm9pZCAwKX1mdW5jdGlvbiBJYihhKXthLmgmJmEuYiYmKGEuaC51bm9ic2VydmUoYS5iKSxhLmgub2JzZXJ2ZShhLmIpKX1mdW5jdGlvbiBKYihhKXthPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIDA9PWEud2lkdGh8fDA9PWEuaGVpZ2h0fQpmdW5jdGlvbiBIYihhKXtyZXR1cm4gbmV3IGEuZi5JbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihiKXt0cnl7aWYoYi5sZW5ndGgpe2Zvcih2YXIgYyxkPWJbMF0sZT0xO2U8Yi5sZW5ndGg7ZSsrKWJbZV0udGltZT5kLnRpbWUmJihkPWJbZV0pO2M9ZDthLmc9TGIoYy5yb290Qm91bmRzKTthLmE9TGIoYy5ib3VuZGluZ0NsaWVudFJlY3QpO2Eudj1MYihjLmludGVyc2VjdGlvblJlY3QpO2EuSD0hIWMuaXNJbnRlcnNlY3Rpbmc7d2IoYSl9fWNhdGNoKGYpe2EubSgpLGRiKGEuRywnZ2VuZXJpYycsJ1Byb2JsZW0gaGFuZGxpbmcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgY2FsbGJhY2s6ICcrZi5tZXNzYWdlKX19LHtyb290Om51bGwscm9vdE1hcmdpbjonMHB4Jyx0aHJlc2hvbGQ6WzAsLjEsLjIsLjMsLjQsLjUsLjYsLjcsLjgsLjksMV19KX0KZnVuY3Rpb24gS2IoYSl7YS5mLlJlc2l6ZU9ic2VydmVyP2EubHx8KGEubD1NYihhLGZ1bmN0aW9uKCl7cmV0dXJuIE9iKGEpfSksYS5sLm9ic2VydmUoYS5iKSk6KGEub3x8KGEubz1mdW5jdGlvbigpe3JldHVybiBPYihhKX0sKDAsYS5mLmFkZEV2ZW50TGlzdGVuZXIpKCdyZXNpemUnLGEubykpLGEuanx8KGEuaj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3JldHVybiBPYihhKX0pLGEuai5vYnNlcnZlKGEuYix7Y2hpbGRMaXN0OiExLGF0dHJpYnV0ZXM6ITAsc3VidHJlZTohMX0pKSl9ZnVuY3Rpb24gT2IoYSl7YS5iJiYhSmIoYS5iKSYmKEliKGEpLEdiKGEpKX1mdW5jdGlvbiBNYihhLGIpe3JldHVybiBuZXcgYS5mLlJlc2l6ZU9ic2VydmVyKGIpfWZ1bmN0aW9uIExiKGEpe2lmKGEmJm51bGwhPT1hLngmJm51bGwhPT1hLnkmJm51bGwhPT1hLndpZHRoJiZudWxsIT09YS5oZWlnaHQpcmV0dXJuIG5ldyBCKGEsITEpfTtmdW5jdGlvbiBQYihhKXtyZXR1cm4gYSYmTShhKT9PYmplY3QuZW50cmllcyhhKS5yZWR1Y2UoZnVuY3Rpb24oYixjKXt2YXIgZD1wKGMpO2M9ZC5uZXh0KCkudmFsdWU7ZD1kLm5leHQoKS52YWx1ZTtyZXR1cm4gYiYmTihjKSYmbnVsbCE9ZCYmTShkKSYmTihkLnJlc291cmNlVXJsKX0sITApOiExfTtmdW5jdGlvbiBUKGEsYixjLGQpe3RoaXMuYj1hO3RoaXMubWV0aG9kPWI7dGhpcy52ZXJzaW9uPWM7dGhpcy5hPWR9ZnVuY3Rpb24gUWIoYSl7cmV0dXJuISFhJiZ2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV9ndWlkJiZ2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV9tZXRob2QmJnZvaWQgMCE9PWEub21pZF9tZXNzYWdlX3ZlcnNpb24mJidzdHJpbmcnPT09dHlwZW9mIGEub21pZF9tZXNzYWdlX2d1aWQmJidzdHJpbmcnPT09dHlwZW9mIGEub21pZF9tZXNzYWdlX21ldGhvZCYmJ3N0cmluZyc9PT10eXBlb2YgYS5vbWlkX21lc3NhZ2VfdmVyc2lvbiYmKHZvaWQgMD09PWEub21pZF9tZXNzYWdlX2FyZ3N8fHZvaWQgMCE9PWEub21pZF9tZXNzYWdlX2FyZ3MpfWZ1bmN0aW9uIFJiKGEpe3JldHVybiBuZXcgVChhLm9taWRfbWVzc2FnZV9ndWlkLGEub21pZF9tZXNzYWdlX21ldGhvZCxhLm9taWRfbWVzc2FnZV92ZXJzaW9uLGEub21pZF9tZXNzYWdlX2FyZ3MpfQpmdW5jdGlvbiBTYihhKXt2YXIgYj17fTtiPShiLm9taWRfbWVzc2FnZV9ndWlkPWEuYixiLm9taWRfbWVzc2FnZV9tZXRob2Q9YS5tZXRob2QsYi5vbWlkX21lc3NhZ2VfdmVyc2lvbj1hLnZlcnNpb24sYik7dm9pZCAwIT09YS5hJiYoYi5vbWlkX21lc3NhZ2VfYXJncz1hLmEpO3JldHVybiBifTtmdW5jdGlvbiBUYihhKXt0aGlzLmM9YX07ZnVuY3Rpb24gVShhKXt0aGlzLmM9YTt0aGlzLmhhbmRsZUV4cG9ydGVkTWVzc2FnZT1VLnByb3RvdHlwZS5mLmJpbmQodGhpcyl9cihVLFRiKTtVLnByb3RvdHlwZS5iPWZ1bmN0aW9uKGEsYil7Yj12b2lkIDA9PT1iP3RoaXMuYzpiO2lmKCFiKXRocm93IEVycm9yKCdNZXNzYWdlIGRlc3RpbmF0aW9uIG11c3QgYmUgZGVmaW5lZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBvciB3aGVuIHNlbmRpbmcgdGhlIG1lc3NhZ2UuJyk7Yi5oYW5kbGVFeHBvcnRlZE1lc3NhZ2UoU2IoYSksdGhpcyl9O1UucHJvdG90eXBlLmY9ZnVuY3Rpb24oYSxiKXtRYihhKSYmdGhpcy5hJiZ0aGlzLmEoUmIoYSksYil9O2Z1bmN0aW9uIFViKGEsYil7dGhpcy5jPWI9dm9pZCAwPT09Yj9JOmI7dmFyIGM9dGhpczthLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLGZ1bmN0aW9uKGQpe2lmKCdvYmplY3QnPT09dHlwZW9mIGQuZGF0YSl7dmFyIGU9ZC5kYXRhO1FiKGUpJiZkLnNvdXJjZSYmYy5hJiZjLmEoUmIoZSksZC5zb3VyY2UpfX0pfXIoVWIsVGIpO1ViLnByb3RvdHlwZS5iPWZ1bmN0aW9uKGEsYil7Yj12b2lkIDA9PT1iP3RoaXMuYzpiO2lmKCFiKXRocm93IEVycm9yKCdNZXNzYWdlIGRlc3RpbmF0aW9uIG11c3QgYmUgZGVmaW5lZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBvciB3aGVuIHNlbmRpbmcgdGhlIG1lc3NhZ2UuJyk7Yi5wb3N0TWVzc2FnZShTYihhKSwnKicpfTtmdW5jdGlvbiBWYigpe3JldHVybid4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbihhKXt2YXIgYj0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuJ3knPT09YT8oYiYzfDgpLnRvU3RyaW5nKDE2KTpiLnRvU3RyaW5nKDE2KX0pfTtmdW5jdGlvbiBXYihhKXtpZighYS5hfHwhYS5hLmRvY3VtZW50KXRocm93IEVycm9yKCdPTUlEIFNlcnZpY2UgU2NyaXB0IGlzIG5vdCBydW5uaW5nIHdpdGhpbiBhIHdpbmRvdy4nKTt2YXIgYj1hLmI7YS5iPVtdO2IuZm9yRWFjaChmdW5jdGlvbihjKXt0cnl7dmFyIGQ9YS5jLkM/J2xpbWl0ZWQnOidmdWxsJyxlPU8oYy5hY2Nlc3NNb2RlLHJhKT9jLmFjY2Vzc01vZGU6bnVsbDt2YXIgZj1lPydmdWxsJz09ZSYmJ2xpbWl0ZWQnPT1kP2Q6J2RvbWFpbic9PWU/J2xpbWl0ZWQnOmU6ZDtjLmFjY2Vzc01vZGU9ZjthOnt2YXIgbD1jLnJlc291cmNlVXJsLGc9YS5hLmxvY2F0aW9uLm9yaWdpbjt0cnl7dmFyIGg9bmV3IFVSTChsLGcpO2JyZWFrIGF9Y2F0Y2goVil7fXRyeXtoPW5ldyBVUkwobCk7YnJlYWsgYX1jYXRjaChWKXt9aD1udWxsfWlmKGQ9aCl7dmFyIGs9VmIoKSxtPWEuYS5kb2N1bWVudCx2PW0uY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7di5pZD0nb21pZC12ZXJpZmljYXRpb24tc2NyaXB0LWZyYW1lLScrCms7di5zdHlsZS5kaXNwbGF5PSdub25lJztbJ2Z1bGwnLCdsaW1pdGVkJ10uaW5jbHVkZXMoZik/di5zcmNkb2M9IjxodG1sPjxoZWFkPlxuPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+d2luZG93WydvbWlkVmVyaWZpY2F0aW9uUHJvcGVydGllcyddID0ge1xuJ3NlcnZpY2VXaW5kb3cnOiB3aW5kb3cucGFyZW50LFxuJ2luamVjdGlvblNvdXJjZSc6ICdhcHAnLFxuJ2luamVjdGlvbklkJzogJyIrKGsrJ1wnLFxufTtceDNjL3NjcmlwdD5cbjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicpK2QuaHJlZisnIj5ceDNjL3NjcmlwdD5cbjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPic6J2RvbWFpbic9PWYmJih2LnNyYz1YYihhLGssZCkuaHJlZik7Wydkb21haW4nLCdsaW1pdGVkJ10uaW5jbHVkZXMoZikmJih2LnNhbmRib3g9J2FsbG93LXNjcmlwdHMnKTttLmJvZHkuYXBwZW5kQ2hpbGQodik7dmFyIHc9Yy52ZW5kb3JLZXksRT1jLnZlcmlmaWNhdGlvblBhcmFtZXRlcnM7Cnc9dm9pZCAwPT09dz8nJzp3O0U9dm9pZCAwPT09RT8nJzpFO3cmJidzdHJpbmcnPT09dHlwZW9mIHcmJicnIT09dyYmRSYmJ3N0cmluZyc9PT10eXBlb2YgRSYmJychPT1FJiYoYS5mLmlbd109RSk7YS5jLnYuc2V0KGssYyl9fWNhdGNoKFYpe1NhKCdPTUlEIHZlcmlmaWNhdGlvbiBzY3JpcHQgJytjLnJlc291cmNlVXJsKycgZmFpbGVkIHRvIGxvYWQ6ICcrVil9fSl9CmZ1bmN0aW9uIFhiKGEsYixjKXt2YXIgZD0nLy53ZWxsLWtub3duL29taWQvb21sb2FkZXItdjEuaHRtbCMnOyhuZXcgTWFwKFtbJ3ZlcmlmaWNhdGlvblNjcmlwdFVybCcsYy5ocmVmXSxbJ2luamVjdGlvbklkJyxiXV0pKS5mb3JFYWNoKGZ1bmN0aW9uKGUsZil7ZCs9ZW5jb2RlVVJJQ29tcG9uZW50KGYpKyc9JytlbmNvZGVVUklDb21wb25lbnQoZSkrJyYnfSk7Yj1udWxsO3RyeXtiPW5ldyBVUkwoZCxhLmEucGFyZW50LmxvY2F0aW9uLm9yaWdpbil9Y2F0Y2goZSl7dGhyb3cgRXJyb3IoJ09NSUQgU2VydmljZSBTY3JpcHQgY2Fubm90IGFjY2VzcyB0aGUgcGFyZW50IHdpbmRvdy4nKTt9cmV0dXJuIGJ9O2Z1bmN0aW9uIFliKCl7dmFyIGE9WmIsYj0kYixjPXRoaXM7dGhpcy5jPVg7dGhpcy5iPWE7dGhpcy5hPUgoKTt0aGlzLmc9Yjt0aGlzLmY9ITE7dGhpcy5yZWdpc3RlclNlc3Npb25PYnNlcnZlcihmdW5jdGlvbihkKXtyZXR1cm4gYWMoYyxkKX0pfW49WWIucHJvdG90eXBlO24ucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXI9ZnVuY3Rpb24oYSl7YWIodGhpcy5jLGEpfTtuLnNldFNsb3RFbGVtZW50PWZ1bmN0aW9uKGEpe3RiKGEpPyh0aGlzLmEuZj1hLHRoaXMuYiYmdmIodGhpcy5iKSk6Signc2V0U2xvdEVsZW1lbnQgY2FsbGVkIHdpdGggYSBub24tSFRNTEVsZW1lbnQuICBJdCB3aWxsIGJlIGlnbm9yZWQuJyl9O24uc2V0RWxlbWVudEJvdW5kcz1mdW5jdGlvbihhKXt0aGlzLmEuaj1hO3RoaXMuYiYmdmIodGhpcy5iKTt0aGlzLmImJndiKHRoaXMuYil9O24uZXJyb3I9ZnVuY3Rpb24oYSxiKXtkYih0aGlzLmMsYSxiKX07Cm4ucmVnaXN0ZXJBZEV2ZW50cz1mdW5jdGlvbigpe29iKHRoaXMuYywnamF2YXNjcmlwdCcpfTtuLnJlZ2lzdGVyTWVkaWFFdmVudHM9ZnVuY3Rpb24oKXtuYih0aGlzLmMsJ2phdmFzY3JpcHQnKX07ZnVuY3Rpb24gWShhLGIsYyl7J2ltcHJlc3Npb24nPT1iP3BiKGEuYywnamF2YXNjcmlwdCcpJiYoamIoYS5jLCdqYXZhc2NyaXB0JyksYS5iJiZRKGEuYikpOignbG9hZGVkJz09Yj8oYz12b2lkIDA9PT1jP251bGw6YyxMKGEuYywnamF2YXNjcmlwdCcpJiZrYihhLmMsJ2phdmFzY3JpcHQnLGMpKTpMKGEuYywnamF2YXNjcmlwdCcpJiZsYihhLmMsYiwnamF2YXNjcmlwdCcsYyksWydsb2FkZWQnLCdzdGFydCddLmluY2x1ZGVzKGIpJiZhLmImJlEoYS5iKSl9bi5pbmplY3RWZXJpZmljYXRpb25TY3JpcHRSZXNvdXJjZXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nO2IuYi5wdXNoLmFwcGx5KGIuYixxKGEpKTtpZih0aGlzLmYpdHJ5e1diKHRoaXMuZyl9Y2F0Y2goYyl7SihjLm1lc3NhZ2UpfX07Cm4uc2V0Q3JlYXRpdmVUeXBlPWZ1bmN0aW9uKGEsYil7Yj12b2lkIDA9PT1iP251bGw6YjtpZighdGhpcy5hLmJ8fHRoaXMuYS5hKXRoaXMuYS5hPWEsJ3ZpZGVvJz09YXx8J2F1ZGlvJz09YT90aGlzLmEuYj0ndmlkZW8nOidodG1sRGlzcGxheSc9PWF8fCduYXRpdmVEaXNwbGF5Jz09YT90aGlzLmEuYj0nZGlzcGxheSc6J2RlZmluZWRCeUphdmFTY3JpcHQnPT1hJiZiJiYodGhpcy5hLmI9J25vbmUnPT1iPydkaXNwbGF5JzondmlkZW8nKX07bi5zZXRJbXByZXNzaW9uVHlwZT1mdW5jdGlvbihhKXtpZighdGhpcy5hLmJ8fHRoaXMuYS5hKXRoaXMuYS5oPWF9OwpmdW5jdGlvbiBhYyhhLGIpe2lmKCdzZXNzaW9uU3RhcnQnPT09Yi50eXBlKXthLmY9ITA7dHJ5e1diKGEuZyl9Y2F0Y2goYyl7SihjLm1lc3NhZ2UpfX0nc2Vzc2lvbkZpbmlzaCc9PT1iLnR5cGUmJihhLmY9ITEsKGI9SCgpLmMpJiYnbmF0aXZlJz09Yi5hZFNlc3Npb25UeXBlfHxhLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyKGZ1bmN0aW9uKGMpe3JldHVybiBhYyhhLGMpfSkpfW4uc2V0Q2xpZW50SW5mbz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5hLmN8fHt9O2Qub21pZEpzSW5mbz1PYmplY3QuYXNzaWduKHt9LGQub21pZEpzSW5mbyx7c2Vzc2lvbkNsaWVudFZlcnNpb246YSxwYXJ0bmVyTmFtZTpiLHBhcnRuZXJWZXJzaW9uOmN9KTt0aGlzLmEuYz1kO3JldHVybiB0aGlzLmEuYy5vbWlkSnNJbmZvLnNlcnZpY2VWZXJzaW9ufTtmdW5jdGlvbiBiYyhhKXtyZXR1cm4vXGQrXC5cZCtcLlxkKygtLiopPy8udGVzdChhKX1mdW5jdGlvbiBjYyhhKXthPWEuc3BsaXQoJy0nKVswXS5zcGxpdCgnLicpO2Zvcih2YXIgYj1bJzEnLCcwJywnMyddLGM9MDszPmM7YysrKXt2YXIgZD1wYXJzZUludChhW2NdLDEwKSxlPXBhcnNlSW50KGJbY10sMTApO2lmKGQ+ZSlicmVhaztlbHNlIGlmKGQ8ZSlyZXR1cm4hMX1yZXR1cm4hMH07ZnVuY3Rpb24gZGMoYSxiKXtyZXR1cm4gYmMoYSkmJmNjKGEpP2I/YjpbXTpiJiYnc3RyaW5nJz09PXR5cGVvZiBiP0pTT04ucGFyc2UoYik6W119O2Z1bmN0aW9uIGVjKCl7dmFyIGE9ZmM7dmFyIGI9dm9pZCAwPT09Yj9vbWlkR2xvYmFsOmI7dGhpcy5hPWE7dGhpcy5mPWI7dGhpcy5iPW5ldyBVO3RoaXMuZi5vbWlkPXRoaXMuZi5vbWlkfHx7fTt0aGlzLmYub21pZC52MV9TZXNzaW9uU2VydmljZUNvbW11bmljYXRpb249dGhpcy5iO3RoaXMuYz1iJiZiLmFkZEV2ZW50TGlzdGVuZXImJmIucG9zdE1lc3NhZ2U/bmV3IFViKGIpOm51bGw7dGhpcy5nPW51bGw7dGhpcy5iLmE9dGhpcy5oLmJpbmQodGhpcyk7dGhpcy5jJiYodGhpcy5jLmE9dGhpcy5pLmJpbmQodGhpcykpfWVjLnByb3RvdHlwZS5oPWZ1bmN0aW9uKGEsYil7Z2ModGhpcyxhLGIsdGhpcy5iKX07CmVjLnByb3RvdHlwZS5pPWZ1bmN0aW9uKGEsYil7dGhpcy5nfHwodGhpcy5nPWIpO3RoaXMuZyE9Yj9KKCdUaGUgc291cmNlIHdpbmRvdyBvZiBzZXNzaW9uIGNsaWVudCBwb3N0IG1lc3NhZ2VzIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIHNvdXJjZSBvZiB0aGUgZmlyc3QgbWVzc2FnZS4nKTpnYyh0aGlzLGEsYix0aGlzLmMpfTsKZnVuY3Rpb24gZ2MoYSxiLGMsZCl7ZnVuY3Rpb24gZShoKXtmb3IodmFyIGs9W10sbT0wO208YXJndW1lbnRzLmxlbmd0aDsrK20pa1ttXT1hcmd1bWVudHNbbV07az1uZXcgVChmLCdyZXNwb25zZScsZyxiYyhnKSYmY2MoZyk/azpKU09OLnN0cmluZ2lmeShrKSk7ZC5iKGssYyl9dmFyIGY9Yi5iLGw9Yi5tZXRob2QsZz1iLnZlcnNpb247Yj1kYyhnLGIuYSk7dHJ5e2hjKGEsbCxlLGIpfWNhdGNoKGgpe2QuYihuZXcgVChmLCdlcnJvcicsZywnXG4gICAgICAgIG5hbWU6ICcraC5uYW1lKydcbiAgICAgICAgbWVzc2FnZTogJytoLm1lc3NhZ2UrJ1xuICAgICAgICBmaWxlbmFtZTogJytoLmZpbGVuYW1lKydcbiAgICAgICAgbGluZU51bWJlcjogJytoLmxpbmVOdW1iZXIrJ1xuICAgICAgICBjb2x1bW5OdW1iZXI6ICcraC5jb2x1bW5OdW1iZXIrJ1xuICAgICAgICBzdGFjazogJytoLnN0YWNrKydcbiAgICAgICAgdG9TdHJpbmcoKTogJytoLnRvU3RyaW5nKCkpLGMpfX0KZnVuY3Rpb24gaGMoYSxiLGMsZCl7c3dpdGNoKGIpe2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnJlZ2lzdGVyQWRFdmVudHMnOmEuYS5yZWdpc3RlckFkRXZlbnRzKCk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVnaXN0ZXJNZWRpYUV2ZW50cyc6YS5hLnJlZ2lzdGVyTWVkaWFFdmVudHMoKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5yZWdpc3RlclNlc3Npb25PYnNlcnZlcic6YS5hLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldFNsb3RFbGVtZW50JzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5zZXRTbG90RWxlbWVudChjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRWaWRlb0VsZW1lbnQnOmM9cChkKS5uZXh0KCkudmFsdWU7YT1hLmE7dWIoYyk/KGEuYS5nPWMsYS5iJiZ2YihhLmIpKTpKKCdzZXRWaWRlb0VsZW1lbnQgY2FsbGVkIHdpdGggYSBub24tSFRNTFZpZGVvRWxlbWVudC4gSXQgd2lsbCBiZSBpZ25vcmVkLicpOwpicmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRFbGVtZW50Qm91bmRzJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5zZXRFbGVtZW50Qm91bmRzKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnN0YXJ0U2Vzc2lvbic6SignU2Vzc2lvbiBzdGFydCBmcm9tIEpTIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbW9iaWxlIGFwcC4nKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5maW5pc2hTZXNzaW9uJzpKKCdTZXNzaW9uIGZpbmlzaCBmcm9tIEpTIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbW9iaWxlIGFwcC4nKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5pbXByZXNzaW9uT2NjdXJyZWQnOlkoYS5hLCdpbXByZXNzaW9uJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UubG9hZGVkJzooYz1wKGQpLm5leHQoKS52YWx1ZSk/KGI9e3NraXBwYWJsZTpjLmlzU2tpcHBhYmxlLGF1dG9QbGF5OmMuaXNBdXRvUGxheSxwb3NpdGlvbjpjLnBvc2l0aW9ufSxjLmlzU2tpcHBhYmxlJiYKKGIuc2tpcE9mZnNldD1jLnNraXBPZmZzZXQpLFkoYS5hLCdsb2FkZWQnLGIpKTpZKGEuYSwnbG9hZGVkJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc3RhcnQnOmI9cChkKTtjPWIubmV4dCgpLnZhbHVlO2I9Yi5uZXh0KCkudmFsdWU7WShhLmEsJ3N0YXJ0Jyx7ZHVyYXRpb246YyxtZWRpYVBsYXllclZvbHVtZTpifSk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuZmlyc3RRdWFydGlsZSc6WShhLmEsJ2ZpcnN0UXVhcnRpbGUnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5taWRwb2ludCc6WShhLmEsJ21pZHBvaW50Jyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UudGhpcmRRdWFydGlsZSc6WShhLmEsJ3RoaXJkUXVhcnRpbGUnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5jb21wbGV0ZSc6WShhLmEsJ2NvbXBsZXRlJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucGF1c2UnOlkoYS5hLCdwYXVzZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnJlc3VtZSc6WShhLmEsCidyZXN1bWUnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5idWZmZXJTdGFydCc6WShhLmEsJ2J1ZmZlclN0YXJ0Jyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuYnVmZmVyRmluaXNoJzpZKGEuYSwnYnVmZmVyRmluaXNoJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2tpcHBlZCc6WShhLmEsJ3NraXBwZWQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS52b2x1bWVDaGFuZ2UnOmM9e21lZGlhUGxheWVyVm9sdW1lOnAoZCkubmV4dCgpLnZhbHVlfTtZKGEuYSwndm9sdW1lQ2hhbmdlJyxjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5wbGF5ZXJTdGF0ZUNoYW5nZSc6Yz17c3RhdGU6cChkKS5uZXh0KCkudmFsdWV9O1koYS5hLCdwbGF5ZXJTdGF0ZUNoYW5nZScsYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuYWRVc2VySW50ZXJhY3Rpb24nOmM9e2ludGVyYWN0aW9uVHlwZTpwKGQpLm5leHQoKS52YWx1ZX07WShhLmEsJ2FkVXNlckludGVyYWN0aW9uJywKYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0Q2xpZW50SW5mbyc6dmFyIGU9cChkKTtiPWUubmV4dCgpLnZhbHVlO2Q9ZS5uZXh0KCkudmFsdWU7ZT1lLm5leHQoKS52YWx1ZTthPWEuYS5zZXRDbGllbnRJbmZvKGIsZCxlKTtjKGEpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmluamVjdFZlcmlmaWNhdGlvblNjcmlwdFJlc291cmNlcyc6Yz1wKGQpLm5leHQoKS52YWx1ZTthLmEuaW5qZWN0VmVyaWZpY2F0aW9uU2NyaXB0UmVzb3VyY2VzKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldENyZWF0aXZlVHlwZSc6Yz1wKGQpLm5leHQoKS52YWx1ZTthLmEuc2V0Q3JlYXRpdmVUeXBlKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldEltcHJlc3Npb25UeXBlJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5zZXRJbXByZXNzaW9uVHlwZShjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRDb250ZW50VXJsJzpjPXAoZCkubmV4dCgpLnZhbHVlOwphLmEuYS5vPWM7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2Vzc2lvbkVycm9yJzpiPXAoZCksYz1iLm5leHQoKS52YWx1ZSxiPWIubmV4dCgpLnZhbHVlLGEuYS5lcnJvcihjLGIpfX07ZnVuY3Rpb24gWigpe3ZhciBhPVgsYj1pYyxjPWpjLGQ9WmI7dGhpcy5mPWZjO3RoaXMuYT1hO3RoaXMuYz1iO3RoaXMuaD1jO3RoaXMuZz1kO3RoaXMuYj1IKCl9bj1aLnByb3RvdHlwZTsKbi5UPWZ1bmN0aW9uKGEpe2lmKCEoIShhJiZNKGEpJiZPKGEuaW1wcmVzc2lvbk93bmVyLHBhKSl8fCd2aWRlb0V2ZW50c093bmVyJ2luIGEmJm51bGwhPWEudmlkZW9FdmVudHNPd25lciYmIU8oYS52aWRlb0V2ZW50c093bmVyLHBhKXx8J21lZGlhRXZlbnRzT3duZXInaW4gYSYmbnVsbCE9YS5tZWRpYUV2ZW50c093bmVyJiYhTyhhLm1lZGlhRXZlbnRzT3duZXIscGEpKSl7aWYoYS5jcmVhdGl2ZVR5cGUmJmEuaW1wcmVzc2lvblR5cGUpe3ZhciBiPWEubWVkaWFFdmVudHNPd25lcjtudWxsPT10aGlzLmIuYSYmdGhpcy5mLnNldENyZWF0aXZlVHlwZShhLmNyZWF0aXZlVHlwZSxiKTtudWxsPT10aGlzLmIuaCYmKHRoaXMuYi5oPWEuaW1wcmVzc2lvblR5cGUpO25iKHRoaXMuYSxiKX1lbHNlIGI9YS52aWRlb0V2ZW50c093bmVyLHRoaXMuYi5iPW51bGw9PWJ8fCdub25lJz09PWI/J2Rpc3BsYXknOid2aWRlbycsdGhpcy5iLmE9bnVsbCx0aGlzLmIuaD1udWxsLG5iKHRoaXMuYSxiKTsKb2IodGhpcy5hLGEuaW1wcmVzc2lvbk93bmVyKTthJiZudWxsIT1hLmlzb2xhdGVWZXJpZmljYXRpb25TY3JpcHRzJiYnYm9vbGVhbic9PT10eXBlb2YgYS5pc29sYXRlVmVyaWZpY2F0aW9uU2NyaXB0cyYmKHRoaXMuYi5DPWEuaXNvbGF0ZVZlcmlmaWNhdGlvblNjcmlwdHMpfX07Cm4uVz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtpZihNKGIpKXtpZihlPU8oYi5lbnZpcm9ubWVudCx0YSkmJk8oYi5hZFNlc3Npb25UeXBlLG9hKSllPWIub21pZE5hdGl2ZUluZm8sZT1NKGUpP04oZS5wYXJ0bmVyTmFtZSkmJk4oZS5wYXJ0bmVyVmVyc2lvbik6ITE7ZSYmKGU9Yi5hcHAsZT1NKGUpP04oZS5saWJyYXJ5VmVyc2lvbikmJk4oZS5hcHBJZCk6ITEpfWVsc2UgZT0hMTtlJiYoUGIoZCkmJih0aGlzLmIudj1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGQpKSksZD10aGlzLmYsYz12b2lkIDA9PT1jP251bGw6YyxudWxsPT1hJiYoYT1WYigpKSxiLmNhbk1lYXN1cmVWaXNpYmlsaXR5PWQuYi5DKCksZC5hLmFkU2Vzc2lvbklkPWEsYT1kLmEsZT1iLHZvaWQgMCE9PWUuY29udGVudFVybCYmKGEubz1lLmNvbnRlbnRVcmwsZS5jb250ZW50VXJsPXZvaWQgMCksZT1hLmN8fHt9LGIub21pZEpzSW5mbz1PYmplY3QuYXNzaWduKHt9LGUub21pZEpzSW5mb3x8e30sYi5vbWlkSnNJbmZvfHwKe30pLGU9Yj1PYmplY3QuYXNzaWduKHt9LGUsYiksYS5DfHwobnVsbCE9YS5nPyhlLnZpZGVvRWxlbWVudD1hLmcsZS5hY2Nlc3NNb2RlPSdmdWxsJyk6bnVsbCE9YS5mJiYoZS5zbG90RWxlbWVudD1hLmYsZS5hY2Nlc3NNb2RlPSdmdWxsJykpLGEuYz1iLGViKGQuYyxjKSxkLmImJlEoZC5iKSl9O24uVT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZjtpYihhLmMpO2EuYi5tKCl9O24uJD1mdW5jdGlvbihhKXtNKGEpJiZyYihhLngpJiZyYihhLnkpJiZyYihhLndpZHRoKSYmcmIoYS5oZWlnaHQpJiYodGhpcy5iLkc9YSxxYih0aGlzLmMsJ2NvbnRhaW5lcicpKX07bi5hYT1mdW5jdGlvbihhKXtPKGEsc2EpJiYodGhpcy5iLm09YSwnYmFja2dyb3VuZGVkJz09PWE/cWIodGhpcy5jLCdjb250YWluZXInLCdiYWNrZ3JvdW5kZWQnKTpxYih0aGlzLmMsJ2NvbnRhaW5lcicpKX07bi5YPWZ1bmN0aW9uKGEpeydpbXByZXNzaW9uJz09PWEmJih0aGlzLk0oKSx0aGlzLmcmJlEodGhpcy5nKSl9OwpuLk09ZnVuY3Rpb24oKXtwYih0aGlzLmEsJ25hdGl2ZScpJiZqYih0aGlzLmEsJ25hdGl2ZScpfTtuLlY9ZnVuY3Rpb24oYSl7YT12b2lkIDA9PT1hP251bGw6YTtMKHRoaXMuYSwnbmF0aXZlJykmJmtiKHRoaXMuYSwnbmF0aXZlJyxhKX07bi5lcnJvcj1mdW5jdGlvbihhLGIpe08oYSxuYSkmJmRiKHRoaXMuYSxhLGIpfTtuLlk9ZnVuY3Rpb24oYSxiKXt0aGlzLk4oYSxiKX07bi5OPWZ1bmN0aW9uKGEsYil7TCh0aGlzLmEsJ25hdGl2ZScpJiZPKGEsQSkmJih2b2lkIDA9PT1ifHxNKGIpKSYmKCdsb2FkZWQnPT1hP2tiKHRoaXMuYSwnbmF0aXZlJyxiKTpsYih0aGlzLmEsYSwnbmF0aXZlJyxiKSl9OwpuLlo9ZnVuY3Rpb24oYSl7aWYoJ25vbmUnIT09dGhpcy5hLmEuaSYmJ251bWJlcic9PT10eXBlb2YgYSYmIWlzTmFOKGEpKXt0aGlzLmIudT1hO2E9dGhpcy5oO3ZhciBiPWEuYS5CO251bGwhPWImJmxiKGEuYiwndm9sdW1lQ2hhbmdlJywnbmF0aXZlJyx7bWVkaWFQbGF5ZXJWb2x1bWU6YixkZXZpY2VWb2x1bWU6YS5hLnV9KX19O1oucHJvdG90eXBlLnN0YXJ0U2Vzc2lvbj1aLnByb3RvdHlwZS5XO1oucHJvdG90eXBlLmVycm9yPVoucHJvdG90eXBlLmVycm9yO1oucHJvdG90eXBlLmZpbmlzaFNlc3Npb249Wi5wcm90b3R5cGUuVTtaLnByb3RvdHlwZS5wdWJsaXNoQWRFdmVudD1aLnByb3RvdHlwZS5YO1oucHJvdG90eXBlLnB1Ymxpc2hJbXByZXNzaW9uRXZlbnQ9Wi5wcm90b3R5cGUuTTtaLnByb3RvdHlwZS5wdWJsaXNoVmlkZW9FdmVudD1aLnByb3RvdHlwZS5ZO1oucHJvdG90eXBlLnB1Ymxpc2hNZWRpYUV2ZW50PVoucHJvdG90eXBlLk47CloucHJvdG90eXBlLnB1Ymxpc2hMb2FkZWRFdmVudD1aLnByb3RvdHlwZS5WO1oucHJvdG90eXBlLnNldE5hdGl2ZVZpZXdIaWVyYXJjaHk9Wi5wcm90b3R5cGUuJDtaLnByb3RvdHlwZS5zZXRTdGF0ZT1aLnByb3RvdHlwZS5hYTtaLnByb3RvdHlwZS5zZXREZXZpY2VWb2x1bWU9Wi5wcm90b3R5cGUuWjtaLnByb3RvdHlwZS5pbml0PVoucHJvdG90eXBlLlQ7ZnVuY3Rpb24ga2MoKXt2YXIgYT1YLGI9bGM7dmFyIGM9dm9pZCAwPT09Yz9JOmM7dGhpcy5nPWE7dGhpcy5hPWI7dGhpcy5oPXt9O3RoaXMuZj17fTt0aGlzLmM9bmV3IFU7Yy5vbWlkPWMub21pZHx8e307Yy5vbWlkLnYxX1ZlcmlmaWNhdGlvblNlcnZpY2VDb21tdW5pY2F0aW9uPXRoaXMuYzt0aGlzLmI9bnVsbDtjJiZjLmFkZEV2ZW50TGlzdGVuZXImJmMucG9zdE1lc3NhZ2UmJih0aGlzLmI9bmV3IFViKGMpKTt0aGlzLmMuYT10aGlzLmkuYmluZCh0aGlzKTt0aGlzLmImJih0aGlzLmIuYT10aGlzLmouYmluZCh0aGlzKSl9ZnVuY3Rpb24gbWMoYSxiLGMsZCl7RWIoYS5hLGIsYyxkKX1mdW5jdGlvbiBuYyhhLGIsYyxkKXtEYihhLmEsJ2Rvd25sb2FkSmF2YVNjcmlwdFJlc291cmNlJykoYixjLGQpfWtjLnByb3RvdHlwZS5qPWZ1bmN0aW9uKGEsYil7dGhpcy5iJiZvYyh0aGlzLGEsYix0aGlzLmIpfTtrYy5wcm90b3R5cGUuaT1mdW5jdGlvbihhLGIpe29jKHRoaXMsYSxiLHRoaXMuYyl9OwpmdW5jdGlvbiBvYyhhLGIsYyxkKXtmdW5jdGlvbiBlKEYpe2Zvcih2YXIgVz1bXSxxYT0wO3FhPGFyZ3VtZW50cy5sZW5ndGg7KytxYSlXW3FhXT1hcmd1bWVudHNbcWFdO1c9bmV3IFQoZiwncmVzcG9uc2UnLGcsYmMoZykmJmNjKGcpP1c6SlNPTi5zdHJpbmdpZnkoVykpO2QuYihXLGMpfXZhciBmPWIuYixsPWIubWV0aG9kLGc9Yi52ZXJzaW9uO2I9ZGMoZyxiLmEpO3RyeXtzd2l0Y2gobCl7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5hZGRFdmVudExpc3RlbmVyJzp2YXIgaD1wKGIpLm5leHQoKS52YWx1ZTtaYShhLmcsaCxlKTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmFkZFNlc3Npb25MaXN0ZW5lcic6dmFyIGs9cChiKSxtPWsubmV4dCgpLnZhbHVlLHY9ay5uZXh0KCkudmFsdWU7YWIoYS5nLGUsbSx2KTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLnNlbmRVcmwnOnZhciB3PXAoYikubmV4dCgpLnZhbHVlO21jKGEsdyxmdW5jdGlvbigpe3JldHVybiBlKCEwKX0sCmZ1bmN0aW9uKCl7cmV0dXJuIGUoITEpfSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5zZXRUaW1lb3V0Jzp2YXIgRT1wKGIpLFY9RS5uZXh0KCkudmFsdWUsdGM9RS5uZXh0KCkudmFsdWU7YS5oW1ZdPUFiKGEuYSwnc2V0VGltZW91dCcpKGUsdGMpO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuY2xlYXJUaW1lb3V0Jzp2YXIgdWM9cChiKS5uZXh0KCkudmFsdWU7Q2IoYS5hLGEuaFt1Y10pO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2Uuc2V0SW50ZXJ2YWwnOnZhciBOYj1wKGIpLHZjPU5iLm5leHQoKS52YWx1ZSx3Yz1OYi5uZXh0KCkudmFsdWU7YS5mW3ZjXT16YihhLmEsZSx3Yyk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5jbGVhckludGVydmFsJzp2YXIgeGM9cChiKS5uZXh0KCkudmFsdWU7QmIoYS5hLGEuZlt4Y10pO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuaW5qZWN0SmF2YVNjcmlwdFJlc291cmNlJzp2YXIgeWM9CnAoYikubmV4dCgpLnZhbHVlO25jKGEseWMsZnVuY3Rpb24oRil7cmV0dXJuIGUoITAsRil9LGZ1bmN0aW9uKCl7cmV0dXJuIGUoITEpfSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5nZXRWZXJzaW9uJzpwKGIpLm5leHQoKTt2YXIgemM9SCgpLmMub21pZEpzSW5mbztlKHpjLnNlcnZpY2VWZXJzaW9uKX19Y2F0Y2goRil7ZC5iKG5ldyBUKGYsJ2Vycm9yJyxnLCdcbiAgICAgICAgICAgICAgbmFtZTogJytGLm5hbWUrJ1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnK0YubWVzc2FnZSsnXG4gICAgICAgICAgICAgIGZpbGVuYW1lOiAnK0YuZmlsZW5hbWUrJ1xuICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAnK0YubGluZU51bWJlcisnXG4gICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogJytGLmNvbHVtbk51bWJlcisnXG4gICAgICAgICAgICAgIHN0YWNrOiAnK0Yuc3RhY2srJ1xuICAgICAgICAgICAgICB0b1N0cmluZygpOiAnK0YudG9TdHJpbmcoKSsnXG4gICAgICAgICAgJyksCmMpfX07ZnVuY3Rpb24gcGMoKXt2YXIgYT1JLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO2EuaWQ9J29taWRfdjFfcHJlc2VudCc7YS5uYW1lPSdvbWlkX3YxX3ByZXNlbnQnO2Euc3R5bGUuZGlzcGxheT0nbm9uZSc7SS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpfWZ1bmN0aW9uIHFjKCl7dmFyIGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYil7Yi5mb3JFYWNoKGZ1bmN0aW9uKGMpeydCT0RZJz09PWMuYWRkZWROb2Rlc1swXS5ub2RlTmFtZSYmKHBjKCksYS5kaXNjb25uZWN0KCkpfSl9KTthLm9ic2VydmUoSS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2NoaWxkTGlzdDohMH0pfTt2YXIgWD1uZXcgVGEsbGM9bmV3IGZ1bmN0aW9uKCl7dmFyIGE7dGhpcy5hPWE9dm9pZCAwPT09YT9vbWlkR2xvYmFsOmF9O25ldyBrYzt2YXIgcmM9bmV3IGZ1bmN0aW9uKCl7fSxzYz1uZXcgZnVuY3Rpb24oKXt9LGljPW5ldyBmdW5jdGlvbigpe3RoaXMuYj1YO3RoaXMuYz1zYzt0aGlzLmE9SCgpfSxBYztJP0FjPUkuSW50ZXJzZWN0aW9uT2JzZXJ2ZXImJihJLk11dGF0aW9uT2JzZXJ2ZXJ8fEkuUmVzaXplT2JzZXJ2ZXIpP25ldyBTKEkscmMsaWMsWCk6bmV3IFIoSSxzYyxpYyxsYyxYKTpBYz1udWxsO3ZhciBaYj1BYywkYj1uZXcgZnVuY3Rpb24oKXt2YXIgYT1YO3ZhciBiPXZvaWQgMD09PWI/STpiO3RoaXMuZj1hO3RoaXMuYT1iO3RoaXMuYz1IKCk7dGhpcy5iPVtdfSxmYz1uZXcgWWIsamM9bmV3IGZ1bmN0aW9uKCl7dmFyIGE9WCxiPUgoKTt0aGlzLmI9YTt0aGlzLmE9Yn07SS5vbWlkQnJpZGdlPW5ldyBaO25ldyBlYzsKaWYoSS5mcmFtZXMmJkkuZG9jdW1lbnQmJiEoJ29taWRfdjFfcHJlc2VudCdpbiBJLmZyYW1lcykpe3ZhciBCYztpZihCYz1udWxsPT1JLmRvY3VtZW50LmJvZHkpQmM9J011dGF0aW9uT2JzZXJ2ZXInaW4gSTtCYz9xYygpOkkuZG9jdW1lbnQuYm9keT9wYygpOkkuZG9jdW1lbnQud3JpdGUoJzxpZnJhbWUgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9Im9taWRfdjFfcHJlc2VudCIgbmFtZT0ib21pZF92MV9wcmVzZW50Ij48L2lmcmFtZT4nKX07Cn0pLmNhbGwodGhpcywgdGhpcyk7Cg==" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
VIEWABILITY_PARTNER_NAME |
"Iqzone" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final long |
CACHED_VIDEO_LIFE_TIME |
115200000L |
public static final java.lang.String |
FILE_FOLDER |
"PNVpaidAds" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
BANNER |
1000 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
LOADING |
201 |
public static final int |
NONE |
200 |
public static final int |
SHOWING |
202 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
ETHERNET |
1 |
public static final int |
MOBILE |
3 |
public static final int |
UNKNOWN |
0 |
public static final int |
WIFI |
2 |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final java.lang.String |
ACCEPT_INVITATION |
"acceptInvitation" |
public static final java.lang.String |
AD_COLLAPSE |
"adCollapse" |
public static final java.lang.String |
AD_EXPAND |
"adExpand" |
public static final java.lang.String |
CLOSE |
"close" |
public static final java.lang.String |
CLOSE_LINEAR |
"closeLinear" |
public static final java.lang.String |
COMPLETE |
"complete" |
public static final java.lang.String |
CREATIVE_VIEW |
"creativeView" |
public static final java.lang.String |
FIRST_QUARTILE |
"firstQuartile" |
public static final java.lang.String |
INTERACTIVE_START |
"interactiveStart" |
public static final java.lang.String |
MIDPOINT |
"midpoint" |
public static final java.lang.String |
MINIMIZE |
"minimize" |
public static final java.lang.String |
MUTE |
"mute" |
public static final java.lang.String |
NOT_USED |
"notUsed" |
public static final java.lang.String |
OTHER_AD_INTERACTION |
"otherAdInteraction" |
public static final java.lang.String |
OVERLAY_VIEW_DURATION |
"overlayViewDuration" |
public static final java.lang.String |
PAUSE |
"pause" |
public static final java.lang.String |
PLAYER_COLLAPSE |
"playerCollapse" |
public static final java.lang.String |
PLAYER_EXPAND |
"playerExpand" |
public static final java.lang.String |
PROGRESS |
"progress" |
public static final java.lang.String |
RESUME |
"resume" |
public static final java.lang.String |
REWIND |
"rewind" |
public static final java.lang.String |
SKIP |
"skip" |
public static final java.lang.String |
START |
"start" |
public static final java.lang.String |
THIRD_QUARTILE |
"thirdQuartile" |
public static final java.lang.String |
UNMUTE |
"unmute" |
| Modifier and Type | Constant Field | Value |
|---|---|---|
public static final int |
VALUE_BLOCKED |
-2 |
public static final int |
VALUE_UNKNOWN |
-1 |