Plugin Directory

Changeset 3339385


Ignore:
Timestamp:
08/05/2025 05:01:50 AM (7 months ago)
Author:
webikon
Message:

Improve WooCommerce Blocks checkout compatibility and parcel shop validation

Location:
wc-dpd
Files:
89 added
21 edited

Legend:

Unmodified
Added
Removed
  • wc-dpd/trunk/includes/Blocks.php

    r3255337 r3339385  
    1515        if (!is_woocommerce_blocks_enabled()) {
    1616            return;
     17        }
     18
     19        // Hook into Store API validation - this is the main validation for blocks checkout
     20        add_action('woocommerce_store_api_checkout_update_order_from_request', [__CLASS__, 'validateParcelShopOnStoreApi'], 10, 2);
     21
     22        // Additional validation hook for checkout processing
     23        add_action('woocommerce_rest_checkout_process_payment_with_context', [__CLASS__, 'validateParcelShopBeforePayment'], 5, 2);
     24    }
     25
     26    /**
     27     * Validate parcel shop selection for Store API requests
     28     *
     29     * @param \WC_Order $order
     30     * @param \WP_REST_Request $request
     31     */
     32    public static function validateParcelShopOnStoreApi($order, $request)
     33    {
     34        self::validateParcelShopSelection($order);
     35    }
     36
     37    /**
     38     * Validate parcel shop selection before payment processing
     39     *
     40     * @param \Automattic\WooCommerce\StoreApi\Utilities\CheckoutTrait $context
     41     * @param \Automattic\WooCommerce\StoreApi\Utilities\PaymentResult $result
     42     */
     43    public static function validateParcelShopBeforePayment($context, $result)
     44    {
     45        if (isset($context->order)) {
     46            self::validateParcelShopSelection($context->order);
     47        }
     48    }
     49
     50    /**
     51     * Core validation logic for parcel shop selection
     52     *
     53     * @param \WC_Order $order
     54     * @throws \Exception
     55     */
     56    private static function validateParcelShopSelection($order)
     57    {
     58        $shipping_methods = $order->get_shipping_methods();
     59
     60        foreach ($shipping_methods as $shipping_method) {
     61            if ($shipping_method->get_method_id() === DpdParcelShopShippingMethod::SETTINGS_ID_KEY) {
     62                // Check if parcel shop data exists in session
     63                $chosen_parcelshop_data = WC()->session ? WC()->session->get(Shipping::SESSION_CHOSEN_PARCELSHOP_KEY) : null;
     64
     65                // If no session data, also check if data was passed in the request
     66                if (empty($chosen_parcelshop_data)) {
     67                    // Check if parcel shop data was passed directly in the order meta or request
     68                    $parcelshop_pus_id = $order->get_meta(DpdParcelShopShippingMethod::PARCELSHOP_PUS_ID_META_KEY);
     69                    $parcelshop_name = $order->get_meta(DpdParcelShopShippingMethod::PARCELSHOP_NAME_META_KEY);
     70
     71                    if (empty($parcelshop_pus_id) && empty($parcelshop_name)) {
     72                        throw new \Exception(__("You have to choose a parcelshop.", "wc-dpd"));
     73                    }
     74                } else {
     75                    // Validate session data completeness using the correct field names
     76                    $required_fields = [
     77                        DpdParcelShopShippingMethod::PARCELSHOP_PUS_ID_META_KEY => __("Parcel shop ID is required.", "wc-dpd"),
     78                        DpdParcelShopShippingMethod::PARCELSHOP_NAME_META_KEY => __("Parcel shop name is required.", "wc-dpd"),
     79                        DpdParcelShopShippingMethod::PARCELSHOP_STREET_META_KEY => __("Parcel shop street is required.", "wc-dpd"),
     80                        DpdParcelShopShippingMethod::PARCELSHOP_ZIP_META_KEY => __("Parcel shop ZIP code is required.", "wc-dpd"),
     81                        DpdParcelShopShippingMethod::PARCELSHOP_CITY_META_KEY => __("Parcel shop city is required.", "wc-dpd"),
     82                        DpdParcelShopShippingMethod::PARCELSHOP_COUNTRY_CODE_META_KEY => __("Parcel shop country code is required.", "wc-dpd")
     83                    ];
     84
     85                    foreach ($required_fields as $field => $error_message) {
     86                        if (empty($chosen_parcelshop_data[$field])) {
     87                            throw new \Exception($error_message);
     88                        }
     89                    }
     90                }
     91
     92                break;
     93            }
    1794        }
    1895    }
  • wc-dpd/trunk/includes/Core.php

    r3255337 r3339385  
    2525        Email::init();
    2626        Hooks::init();
    27         Blocks::init();
     27        Blocks::init();
    2828    }
    2929
  • wc-dpd/trunk/includes/DpdParcelShopShippingMethod.php

    r3292802 r3339385  
    137137                'title' => __('Free shipping from', 'wc-dpd'),
    138138                'type' => 'price',
    139                 'description' => __('If you exceed the price in the cart, shipping will be free.', 'wc-dpd'),
     139                'description' => __('Set minimum cart value for free shipping. Leave empty to disable free shipping entirely.', 'wc-dpd'),
    140140                'default' => '',
    141141                'desc_tip' => true,
  • wc-dpd/trunk/includes/helpers.php

    r3255337 r3339385  
    173173function is_cart_or_checkout_page()
    174174{
    175     return (bool) (is_cart() || is_checkout());
     175    $is_cart_or_checkout = (bool) (is_cart() || is_checkout());
     176
     177    /**
     178     * Filter to customize cart or checkout page detection
     179     *
     180     * @param bool $is_cart_or_checkout Current detection result
     181     * @return bool Modified detection result
     182     */
     183    return apply_filters('wc_dpd_is_cart_or_checkout_page', $is_cart_or_checkout);
    176184}
    177185
  • wc-dpd/trunk/languages/wc-dpd-sk_SK.po

    r3255337 r3339385  
    11msgid ""
    22msgstr ""
    3 "Project-Id-Version: DPD SK for WooCommerce - 7.0.1\n"
     3"Project-Id-Version: DPD SK for WooCommerce - 8.1.0\n"
    44"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-dpd\n"
    5 "POT-Creation-Date: 2025-03-12T13:34:54+00:00\n"
    6 "PO-Revision-Date: 2025-03-12 14:35+0100\n"
     5"POT-Creation-Date: 2025-08-04T19:06:58+00:00\n"
     6"PO-Revision-Date: 2025-08-05 06:42+0200\n"
    77"Last-Translator: \n"
    88"Language-Team: Slovenčina\n"
     
    1313"Plural-Forms: nplurals=3; plural=( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : "
    1414"2;\n"
    15 "X-Generator: Poedit 3.5\n"
     15"X-Generator: Poedit 3.6\n"
    1616"X-Loco-Version: 2.6.1; wp-5.9.3\n"
    1717"X-Domain: wc-dpd\n"
     
    6060msgstr "Vyberte si prosím jeden z dostupných DPD Pickup/Pickup Station miest!"
    6161
     62#: includes/Blocks.php:72 includes/Shipping.php:76
     63msgid "You have to choose a parcelshop."
     64msgstr "Musíte si vybrať DPD Pickup/Pickup Station."
     65
     66#: includes/Blocks.php:77
     67msgid "Parcel shop ID is required."
     68msgstr "ID DPD Pickup/Pickup Station je povinné."
     69
     70#: includes/Blocks.php:78
     71msgid "Parcel shop name is required."
     72msgstr "Názov DPD Pickup/Pickup Station je povinný."
     73
     74#: includes/Blocks.php:79
     75msgid "Parcel shop street is required."
     76msgstr "Ulica DPD Pickup/Pickup Station je povinná."
     77
     78#: includes/Blocks.php:80
     79msgid "Parcel shop ZIP code is required."
     80msgstr "PSČ DPD Pickup/Pickup Station je povinné."
     81
     82#: includes/Blocks.php:81
     83msgid "Parcel shop city is required."
     84msgstr "Mesto DPD Pickup/Pickup Station je povinné."
     85
     86#: includes/Blocks.php:82
     87msgid "Parcel shop country code is required."
     88msgstr "Kód krajiny DPD Pickup/Pickup Station je povinný."
     89
    6290#: includes/Client.php:40
    6391msgid "Use the correct request method. Possible values are: %s"
     
    276304
    277305#: includes/DpdParcelShopShippingMethod.php:139
    278 msgid "If you exceed the price in the cart, shipping will be free."
    279 msgstr "Ak prekročíte cenu v košíku, poštovné bude zadarmo."
     306msgid ""
     307"Set minimum cart value for free shipping. Leave empty to disable free "
     308"shipping entirely."
     309msgstr ""
     310"Nastavte minimálnu hodnotu košíka pre dopravu zadarmo. Nechajte prázdne pre "
     311"zakázanie dopravy zdarma."
    280312
    281313#: includes/DpdParcelShopShippingMethod.php:146
     
    489521msgstr "DPD Hromadné stiahnutie štítkov"
    490522
    491 #: includes/OrderList.php:92 includes/OrderMetabox.php:174
     523#: includes/OrderList.php:92 includes/OrderMetabox.php:275
    492524msgid "Export to DPD"
    493525msgstr "Export do DPD"
     
    501533msgstr "Stiahnuť štítok"
    502534
    503 #: includes/OrderList.php:140 includes/OrderMetabox.php:61
     535#: includes/OrderList.php:140 includes/OrderMetabox.php:155
    504536msgid "Package number"
    505537msgstr "Číslo balíka"
     
    509541msgstr "Zlé ID objednávky %d"
    510542
    511 #: includes/OrderMetabox.php:30
     543#: includes/OrderMetabox.php:31
    512544msgid "DPD Export"
    513545msgstr "DPD Export"
    514546
    515 #: includes/OrderMetabox.php:54
     547#: includes/OrderMetabox.php:148
    516548msgid "Export Status"
    517549msgstr "Stav exportu"
    518550
    519 #: includes/OrderMetabox.php:54
     551#: includes/OrderMetabox.php:148
    520552msgid "Success"
    521553msgstr "Úspech"
    522554
    523 #: includes/OrderMetabox.php:57
     555#: includes/OrderMetabox.php:151
    524556msgid "Download DPD label"
    525557msgstr "Stiahnuť DPD štítok"
    526558
    527 #: includes/OrderMetabox.php:64
     559#: includes/OrderMetabox.php:161
    528560msgid "Reset"
    529561msgstr "Resetovať"
    530562
    531 #: includes/OrderMetabox.php:100
     563#: includes/OrderMetabox.php:201
    532564msgid "ID Bank account"
    533565msgstr "ID bankového účtu"
    534566
    535 #: includes/OrderMetabox.php:120
     567#: includes/OrderMetabox.php:221
    536568msgid "ID of the collection point"
    537569msgstr "ID zberného miesta"
    538570
    539 #: includes/OrderMetabox.php:140
     571#: includes/OrderMetabox.php:241
    540572msgid "Shipping product"
    541573msgstr "Preprava produktu"
    542574
    543 #: includes/OrderMetabox.php:152
     575#: includes/OrderMetabox.php:253
    544576msgid "Notification"
    545577msgstr "Notifikácie"
    546578
    547 #: includes/OrderMetabox.php:157 includes/OrderMetabox.php:162
     579#: includes/OrderMetabox.php:258 includes/OrderMetabox.php:263
    548580msgid "Reference %d"
    549581msgstr "Referencia %d"
    550582
    551 #: includes/OrderMetabox.php:167
     583#: includes/OrderMetabox.php:268
    552584msgid "Package Weight (kg)"
    553585msgstr "Hmotnosť balíka (kg)"
    554586
    555 #: includes/OrderMetabox.php:169
     587#: includes/OrderMetabox.php:270
    556588msgid ""
    557589"You can set the weight of the package. Leave empty for default: 3.00 kg."
     
    559591"Môžete si nastaviť hmotnosť balíka. Ponechajte prázdne pre predvolenú "
    560592"hodnotu: 3,00 kg."
    561 
    562 #: includes/Shipping.php:76
    563 msgid "You have to choose a parcelshop."
    564 msgstr "Musíte si vybrať DPD Pickup/Pickup Station."
    565593
    566594#: templates/chosen-parcelshop-order-data.php:17
     
    625653msgid "Selected parcelshop"
    626654msgstr "Vybraná DPD Pickup/Pickup Station"
     655
     656#~ msgid "If you exceed the price in the cart, shipping will be free."
     657#~ msgstr "Ak prekročíte cenu v košíku, poštovné bude zadarmo."
    627658
    628659#, php-format
  • wc-dpd/trunk/languages/wc-dpd.pot

    r3255337 r3339385  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: DPD SK for WooCommerce 8.0.0\n"
     5"Project-Id-Version: DPD SK for WooCommerce 8.1.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wc-dpd\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-03-12T13:34:54+00:00\n"
     12"POT-Creation-Date: 2025-08-04T19:06:58+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.11.0\n"
     
    5050msgstr ""
    5151
     52#: includes/Blocks.php:72
     53#: includes/Shipping.php:76
     54msgid "You have to choose a parcelshop."
     55msgstr ""
     56
     57#: includes/Blocks.php:77
     58msgid "Parcel shop ID is required."
     59msgstr ""
     60
     61#: includes/Blocks.php:78
     62msgid "Parcel shop name is required."
     63msgstr ""
     64
     65#: includes/Blocks.php:79
     66msgid "Parcel shop street is required."
     67msgstr ""
     68
     69#: includes/Blocks.php:80
     70msgid "Parcel shop ZIP code is required."
     71msgstr ""
     72
     73#: includes/Blocks.php:81
     74msgid "Parcel shop city is required."
     75msgstr ""
     76
     77#: includes/Blocks.php:82
     78msgid "Parcel shop country code is required."
     79msgstr ""
     80
    5281#: includes/Client.php:40
    5382msgid "Use the correct request method. Possible values are: %s"
     
    259288
    260289#: includes/DpdParcelShopShippingMethod.php:139
    261 msgid "If you exceed the price in the cart, shipping will be free."
     290msgid "Set minimum cart value for free shipping. Leave empty to disable free shipping entirely."
    262291msgstr ""
    263292
     
    460489
    461490#: includes/OrderList.php:92
    462 #: includes/OrderMetabox.php:174
     491#: includes/OrderMetabox.php:275
    463492msgid "Export to DPD"
    464493msgstr ""
     
    473502
    474503#: includes/OrderList.php:140
    475 #: includes/OrderMetabox.php:61
     504#: includes/OrderMetabox.php:155
    476505msgid "Package number"
    477506msgstr ""
     
    481510msgstr ""
    482511
    483 #: includes/OrderMetabox.php:30
     512#: includes/OrderMetabox.php:31
    484513msgid "DPD Export"
    485514msgstr ""
    486515
    487 #: includes/OrderMetabox.php:54
     516#: includes/OrderMetabox.php:148
    488517msgid "Export Status"
    489518msgstr ""
    490519
    491 #: includes/OrderMetabox.php:54
     520#: includes/OrderMetabox.php:148
    492521msgid "Success"
    493522msgstr ""
    494523
    495 #: includes/OrderMetabox.php:57
     524#: includes/OrderMetabox.php:151
    496525msgid "Download DPD label"
    497526msgstr ""
    498527
    499 #: includes/OrderMetabox.php:64
     528#: includes/OrderMetabox.php:161
    500529msgid "Reset"
    501530msgstr ""
    502531
    503 #: includes/OrderMetabox.php:100
     532#: includes/OrderMetabox.php:201
    504533msgid "ID Bank account"
    505534msgstr ""
    506535
    507 #: includes/OrderMetabox.php:120
     536#: includes/OrderMetabox.php:221
    508537msgid "ID of the collection point"
    509538msgstr ""
    510539
    511 #: includes/OrderMetabox.php:140
     540#: includes/OrderMetabox.php:241
    512541msgid "Shipping product"
    513542msgstr ""
    514543
    515 #: includes/OrderMetabox.php:152
     544#: includes/OrderMetabox.php:253
    516545msgid "Notification"
    517546msgstr ""
    518547
    519 #: includes/OrderMetabox.php:157
    520 #: includes/OrderMetabox.php:162
     548#: includes/OrderMetabox.php:258
     549#: includes/OrderMetabox.php:263
    521550msgid "Reference %d"
    522551msgstr ""
    523552
    524 #: includes/OrderMetabox.php:167
     553#: includes/OrderMetabox.php:268
    525554msgid "Package Weight (kg)"
    526555msgstr ""
    527556
    528 #: includes/OrderMetabox.php:169
     557#: includes/OrderMetabox.php:270
    529558msgid "You can set the weight of the package. Leave empty for default: 3.00 kg."
    530 msgstr ""
    531 
    532 #: includes/Shipping.php:76
    533 msgid "You have to choose a parcelshop."
    534559msgstr ""
    535560
  • wc-dpd/trunk/public/mix-manifest.json

    r3254821 r3339385  
    33    "/scripts/dpd-export-settings-admin.js": "/scripts/dpd-export-settings-admin.js?id=0ccbc1dea8f7fd9c9ef3fb889590e84e",
    44    "/scripts/dpd-parcelshop-block-shipping-method.js": "/scripts/dpd-parcelshop-block-shipping-method.js?id=e5f0e422d50e710a939bb849736ffed5",
    5     "/scripts/dpd-parcelshop-map-widget.js": "/scripts/dpd-parcelshop-map-widget.js?id=6cc3fe831b5d8c730b612bc3b8a2ab84",
     5    "/scripts/dpd-parcelshop-map-widget.js": "/scripts/dpd-parcelshop-map-widget.js?id=24a777dbdacde05004c3b4e8e09920f3",
    66    "/scripts/dpd-parcelshop-popup.js": "/scripts/dpd-parcelshop-popup.js?id=1075b4ccd465fad2aa5393edf9a42e77",
    77    "/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js": "/scripts/dpd-parcelshop-shipping-method-weight-by-package-repeater.js?id=b23c5e1e691f8153be782553760b97f7",
  • wc-dpd/trunk/public/scripts/dpd-parcelshop-map-widget.js

    r3292802 r3339385  
    1616/***/ (() => {
    1717
    18 eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nwindow.dpdParcelShopWidget = function () {\n  var mapWidgetPopupSelector,\n    popup,\n    dpdMapWidget,\n    mapWidgetPopupContainerSelector,\n    mapWidgetPopupOpenBtnSelector,\n    chosenParcelShopContentSelector,\n    chosenParcelShopContentTextSelector,\n    chosenParcelShopHiddenParcelIdSelector,\n    chosenParcelShopHiddenParcelPusIdSelector,\n    chosenParcelShopHiddenParcelNameSelector,\n    chosenParcelShopHiddenParcelStreetSelector,\n    chosenParcelShopHiddenParcelCitySelector,\n    chosenParcelShopHiddenParcelZipSelector,\n    chosenParcelShopHiddenParcelCountryCodeSelector,\n    dpdMapWidgetEl,\n    customerZip,\n    countries,\n    baseCountryCode,\n    isMapInitialized = false;\n  function init() {\n    mapWidgetPopupOpenBtnSelector = '.js-dpd-parcelshop-map-widget-open-popup-btn';\n    mapWidgetPopupSelector = '.js-dpd-parcelshop-map-widget-popup';\n    mapWidgetPopupContainerSelector = '.js-dpd-parcelshop-map-widget-popup-container';\n    chosenParcelShopContentSelector = '.js-dpd-chosen-parcelshop-content';\n    chosenParcelShopContentTextSelector = '.js-dpd-chosen-parcelshop-chosen-parcelshop-text';\n    chosenParcelShopHiddenParcelIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-id';\n    chosenParcelShopHiddenParcelPusIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-pus-id';\n    chosenParcelShopHiddenParcelNameSelector = '.js-dpd-parcelshop-hidden-parcelshop-name';\n    chosenParcelShopHiddenParcelStreetSelector = '.js-dpd-parcelshop-hidden-parcelshop-street';\n    chosenParcelShopHiddenParcelCitySelector = '.js-dpd-parcelshop-hidden-parcelshop-city';\n    chosenParcelShopHiddenParcelZipSelector = '.js-dpd-parcelshop-hidden-parcelshop-zip';\n    chosenParcelShopHiddenParcelCountryCodeSelector = '.js-dpd-parcelshop-hidden-parcelshop-country-code';\n    popup = document.querySelector(mapWidgetPopupSelector);\n\n    /**\n     * Open the popup when the user clicks the open button\n     */\n    document.addEventListener('click', function (event) {\n      if (!event.target.matches(mapWidgetPopupOpenBtnSelector)) {\n        return;\n      }\n      event.preventDefault();\n\n      // Fetch the dpdMapWidgetEl element dynamically\n      dpdMapWidgetEl = document.querySelector('.js-dpd-parcelshop-map-widget-popup-embed');\n      if (!dpdMapWidgetEl) {\n        return;\n      }\n\n      // Fetch the dpdMapOpenWidgetMapPopupEl element dynamically\n      dpdMapOpenWidgetMapPopupEl = event.target.closest(mapWidgetPopupOpenBtnSelector);\n      if (!dpdMapOpenWidgetMapPopupEl) {\n        return;\n      }\n      initMap();\n      openPopup();\n    }, false);\n\n    /**\n     * Close the popup when the user clicks outside of it\n     */\n    document.addEventListener('click', function (event) {\n      if (!event.target.matches(mapWidgetPopupContainerSelector)) {\n        return;\n      }\n      event.preventDefault();\n      closePopup();\n    }, false);\n\n    /**\n     * Close the popup when the escape key is pressed\n     */\n    document.addEventListener('keydown', function (event) {\n      if (event.key !== 'Escape') {\n        return;\n      }\n      closePopup();\n    }, false);\n\n    /**\n     * Trigger the update_checkout event when the payment method is changed and a parcel shop is chosen\n     */\n    document.addEventListener('change', function (event) {\n      if (event.target && event.target.matches('input[name=\"payment_method\"]')) {\n        // Check if a parcel shop is chosen\n        if (isParcelShopChosen()) {\n          // Trigger the update_checkout event\n          document.body.dispatchEvent(new Event('update_checkout'));\n        }\n      }\n    }, false);\n  }\n\n  /**\n   * Initialize the map\n   */\n  function initMap() {\n    if (isMapInitialized) {\n      return;\n    }\n    var apiKey = dpdMapWidgetEl.getAttribute('data-api-key');\n    if (!apiKey) {\n      console.log('Map Api key is missing');\n      return;\n    }\n    countries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-countries'));\n    allowedCountries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-allowed-countries'));\n    allowedCountries = allowedCountries.join(',');\n    baseCountryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n    dpdMapWidget = new DpdPudo.Widget({\n      apiKey: apiKey,\n      country: baseCountryCode,\n      allowedCountries: [allowedCountries]\n    });\n    isMapInitialized = true;\n  }\n\n  /**\n   * Set the selected parcel shop in the session and update the frontend field\n   */\n  function setSelectedParcelShop() {\n    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!data || Object.keys(data).length === 0) {\n      return;\n    }\n    var parcelShopId = data.hasOwnProperty('id') ? data.id : null;\n    var parcelShopPusId = data.hasOwnProperty('id') ? data.id : null;\n    var parcelShopName = data.hasOwnProperty('name') ? data.name : null;\n    var parcelShopStreet = data.hasOwnProperty('street') ? data.street : null;\n    var parcelShopZip = data.hasOwnProperty('zip') ? data.zip : null;\n    var parcelShopCity = data.hasOwnProperty('city') ? data.city : null;\n    var parcelShopCountryCode = data.hasOwnProperty('countryCode') ? data.countryCode : null;\n    var parcelShopMaxWeight = data.hasOwnProperty('maxweight') ? data.maxweight : null;\n    var parcelShopCod = data.hasOwnProperty('cod') ? data.cod : null;\n    var parcelShopCard = data.hasOwnProperty('card') ? data.card : null;\n    var isEligibleForAlzabox = data.hasOwnProperty('isEligibleForAlzabox') ? data.isEligibleForAlzabox : null;\n    var isEligibleForSlovenskaPostaBox = data.hasOwnProperty('isEligibleForSlovenskaPostaBox') ? data.isEligibleForSlovenskaPostaBox : null;\n\n    // Update session\n    setSelectedParcelShopSession(parcelShopId, parcelShopPusId, parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountryCode, parcelShopMaxWeight, parcelShopCod, parcelShopCard, isEligibleForAlzabox, isEligibleForSlovenskaPostaBox);\n    var parcelShopCountry = countries && _typeof(countries) === 'object' && countries.hasOwnProperty(parcelShopCountryCode) ? countries[parcelShopCountryCode] : parcelShopCountryCode;\n\n    // Update frontend field\n    document.querySelector(chosenParcelShopHiddenParcelIdSelector).value = parcelShopId;\n    document.querySelector(chosenParcelShopHiddenParcelPusIdSelector).value = parcelShopPusId;\n    document.querySelector(chosenParcelShopHiddenParcelNameSelector).value = parcelShopName;\n    document.querySelector(chosenParcelShopHiddenParcelStreetSelector).value = parcelShopStreet;\n    document.querySelector(chosenParcelShopHiddenParcelZipSelector).value = parcelShopZip;\n    document.querySelector(chosenParcelShopHiddenParcelCitySelector).value = parcelShopCity;\n    document.querySelector(chosenParcelShopHiddenParcelCountryCodeSelector).value = parcelShopCountryCode;\n\n    // Filter out empty values\n    var notEmptyAddressValues = Object.values([parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountry]).filter(function (value) {\n      return !!value;\n    });\n\n    // Construct the text content\n    document.querySelector(chosenParcelShopContentTextSelector).innerHTML = notEmptyAddressValues.join(', ');\n    document.querySelector(chosenParcelShopContentSelector).classList.add('active');\n  }\n\n  /**\n   * Set the selected parcel shop in the session\n   */\n  function setSelectedParcelShopSession() {\n    var parcelShopId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var parcelShopPusId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var parcelShopName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n    var parcelShopStreet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n    var parcelShopZip = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n    var parcelShopCity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n    var parcelShopCountryCode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : '';\n    var parcelShopMaxWeight = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '';\n    var parcelShopCod = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : '';\n    var parcelShopCard = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : '';\n    var isEligibleForAlzabox = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : true;\n    var isEligibleForSlovenskaPostaBox = arguments.length > 11 && arguments[11] !== undefined ? arguments[11] : true;\n    // Prepare XHR Request.\n    var xhr = new XMLHttpRequest();\n    xhr.open('POST', wc_dpd_parcelshop_map_widget_settings.ajax_url, true);\n    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n    // Callback on response.\n    xhr.onreadystatechange = function () {\n      // readyState 4 means the request is done.\n      var DONE = 4;\n\n      // status 200 is a successful return.\n      var OK = 200;\n\n      // Check response.\n      if (xhr.readyState === DONE) {\n        if (xhr.status === OK) {\n          document.body.dispatchEvent(new Event('update_checkout'));\n        }\n      }\n    };\n\n    // Finally do the call with the right parametetrs.\n    xhr.send('action=wc_dpd_update_chosen_parcelshop&wp_nonce=' + popup.getAttribute('data-nonce') + '&wc_dpd_parcelshop_id=' + parcelShopId + '&wc_dpd_parcelshop_pus_id=' + parcelShopPusId + '&wc_dpd_parcelshop_name=' + parcelShopName + '&wc_dpd_parcelshop_street=' + parcelShopStreet + '&wc_dpd_parcelshop_zip=' + parcelShopZip + '&wc_dpd_parcelshop_city=' + parcelShopCity + '&wc_dpd_parcelshop_country_code=' + parcelShopCountryCode + '&wc_dpd_parcelshop_max_weight=' + parcelShopMaxWeight + '&wc_dpd_parcelshop_cod=' + parcelShopCod + '&wc_dpd_parcelshop_card=' + parcelShopCard + '&wc_dpd_parcelshop_is_alzabox_eligible=' + isEligibleForAlzabox + '&wc_dpd_parcelshop_is_slovenska_posta_eligible=' + isEligibleForSlovenskaPostaBox);\n  }\n\n  /**\n   * Open the popup\n   */\n  function openPopup() {\n    popup.classList.add('active');\n    if (dpdMapWidgetEl && dpdMapWidget) {\n      var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n      if (chosenParcelShopId) {\n        dpdMapWidget.options.selectedPudoId = chosenParcelShopId;\n      }\n\n      // Reselect open button to get refreshed data\n      dpdMapOpenWidgetMapPopupEl = document.querySelector(mapWidgetPopupOpenBtnSelector);\n\n      // Add zip if available\n      customerZip = getCustomerZip();\n      if (customerZip) {\n        dpdMapWidget.options.zip = customerZip;\n      }\n\n      // Get the selected customer country\n      var countryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n      if (countryCode) {\n        dpdMapWidget.options.country = countryCode;\n      }\n\n      // Update weight and allowed locker types when opening the popup\n      var minWeightInKg = parseInt(dpdMapOpenWidgetMapPopupEl.getAttribute('data-min-weight-in-kg'));\n      var isEligibleForAlzabox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-alzabox') === 'true';\n      var isEligibleForSlovenskaPostaBox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-slovenska-posta-box') === 'true';\n      dpdMapWidget.options.minWeightInKg = minWeightInKg;\n      var disallowShops = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-shops') === 'true';\n      var disallowLockers = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-lockers') === 'true';\n      var disallowDpdPickupStations = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-dpd-pickup-stations') === 'true';\n      var disallowSkPost = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-sk-post') === 'true';\n      var disallowAlzaBoxes = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-alza-boxes') === 'true';\n      var allowedPudoTypes = ['shop', 'locker'];\n      if (disallowShops) {\n        allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n          return type !== 'shop';\n        });\n      }\n      if (disallowLockers) {\n        allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n          return type !== 'locker';\n        });\n      }\n      dpdMapWidget.options.allowedPudoTypes = allowedPudoTypes;\n      var allowedLockerTypes = ['dpdSkPickupStations', 'skPost', 'alzaSlovakia', 'outsideOfSlovakia'];\n      if (!isEligibleForAlzabox || !isEligibleForSlovenskaPostaBox) {\n        if (!isEligibleForAlzabox) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'alzaSlovakia';\n          });\n        }\n        if (!isEligibleForSlovenskaPostaBox) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'skPost';\n          });\n        }\n      }\n      if (!disallowLockers) {\n        if (disallowDpdPickupStations) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'dpdSkPickupStations';\n          });\n        }\n        if (disallowSkPost) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'skPost';\n          });\n        }\n        if (disallowAlzaBoxes) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'alzaSlovakia';\n          });\n        }\n      }\n      dpdMapWidget.options.allowedLockerTypes = allowedLockerTypes;\n      var requiredServices = [];\n      var isCodRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-cod-required') === 'true';\n      var isCardPaymentRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-card-payment-required') === 'true';\n      if (isCodRequired || isCardPaymentRequired) {\n        if (isCodRequired) {\n          requiredServices.push('cod');\n        }\n        if (isCardPaymentRequired) {\n          requiredServices.push('cardPayment');\n        }\n      }\n      dpdMapWidget.options.requiredServices = requiredServices;\n      dpdMapWidget.attach(dpdMapWidgetEl).then(function (pudo) {\n        setSelectedParcelShop({\n          id: pudo.id,\n          name: pudo.name,\n          street: pudo.street,\n          houseno: pudo.houseno,\n          zip: pudo.zip,\n          city: pudo.city,\n          countryCode: pudo.countryCode,\n          maxweight: pudo.maxWeightInKg,\n          cod: pudo.services && pudo.services.includes('cod') ? true : false,\n          card: pudo.services && pudo.services.includes('cardPayment') ? true : false,\n          isEligibleForAlzabox: isEligibleForAlzabox,\n          isEligibleForSlovenskaPostaBox: isEligibleForSlovenskaPostaBox\n        });\n        closePopup();\n      })[\"catch\"](function (code) {\n        closePopup();\n      });\n    }\n  }\n\n  /**\n   * Close the popup\n   */\n  function closePopup() {\n    popup.classList.remove('active');\n\n    // Check if close method exists\n    if (dpdMapWidget && dpdMapWidget.close) {\n      dpdMapWidget.close();\n    }\n  }\n\n  /**\n   * Check if a parcel shop is chosen\n   */\n  function isParcelShopChosen() {\n    var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n    return chosenParcelShopId !== '';\n  }\n\n  /**\n   * Get customer zip\n   */\n  function getCustomerZip() {\n    // Check if ship to different address is checked\n    var shipToDifferentAddress = document.querySelector('input[name=\"ship_to_different_address\"]');\n    if (shipToDifferentAddress && shipToDifferentAddress.checked) {\n      var shippingPostcodeField = document.querySelector('input[name=\"shipping_postcode\"]');\n      if (shippingPostcodeField) {\n        customerZip = shippingPostcodeField.value;\n      }\n      if (customerZip) {\n        return customerZip;\n      }\n    }\n    var billingPostcodeField = document.querySelector('input[name=\"billing_postcode\"]');\n    if (billingPostcodeField) {\n      customerZip = billingPostcodeField.value;\n    }\n    if (customerZip) {\n      return customerZip;\n    }\n    customerZip = dpdMapOpenWidgetMapPopupEl.getAttribute('data-customer-zip');\n    if (customerZip) {\n      return customerZip;\n    }\n    return '';\n  }\n\n  /**\n   * Check if document is ready\n   */\n  function docReady(fn) {\n    if (document.readyState === 'complete' || document.readyState === 'interactive') {\n      setTimeout(fn, 1);\n    } else {\n      document.addEventListener('DOMContentLoaded', fn);\n    }\n  }\n  docReady(function () {\n    init();\n  });\n\n  // Allow the functions to be called from outside\n  return {\n    openPopup: openPopup\n  };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJkcGRQYXJjZWxTaG9wV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBTZWxlY3RvciIsInBvcHVwIiwiZHBkTWFwV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvciIsIm1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IiLCJkcGRNYXBXaWRnZXRFbCIsImN1c3RvbWVyWmlwIiwiY291bnRyaWVzIiwiYmFzZUNvdW50cnlDb2RlIiwiaXNNYXBJbml0aWFsaXplZCIsImluaXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0YXJnZXQiLCJtYXRjaGVzIiwicHJldmVudERlZmF1bHQiLCJkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCIsImNsb3Nlc3QiLCJpbml0TWFwIiwib3BlblBvcHVwIiwiY2xvc2VQb3B1cCIsImtleSIsImlzUGFyY2VsU2hvcENob3NlbiIsImJvZHkiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJhcGlLZXkiLCJnZXRBdHRyaWJ1dGUiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInBhcnNlIiwiYWxsb3dlZENvdW50cmllcyIsImpvaW4iLCJEcGRQdWRvIiwiV2lkZ2V0IiwiY291bnRyeSIsInNldFNlbGVjdGVkUGFyY2VsU2hvcCIsImRhdGEiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwicGFyY2VsU2hvcElkIiwiaGFzT3duUHJvcGVydHkiLCJpZCIsInBhcmNlbFNob3BQdXNJZCIsInBhcmNlbFNob3BOYW1lIiwibmFtZSIsInBhcmNlbFNob3BTdHJlZXQiLCJzdHJlZXQiLCJwYXJjZWxTaG9wWmlwIiwiemlwIiwicGFyY2VsU2hvcENpdHkiLCJjaXR5IiwicGFyY2VsU2hvcENvdW50cnlDb2RlIiwiY291bnRyeUNvZGUiLCJwYXJjZWxTaG9wTWF4V2VpZ2h0IiwibWF4d2VpZ2h0IiwicGFyY2VsU2hvcENvZCIsImNvZCIsInBhcmNlbFNob3BDYXJkIiwiY2FyZCIsImlzRWxpZ2libGVGb3JBbHphYm94IiwiaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94Iiwic2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbiIsInBhcmNlbFNob3BDb3VudHJ5IiwiX3R5cGVvZiIsInZhbHVlIiwibm90RW1wdHlBZGRyZXNzVmFsdWVzIiwidmFsdWVzIiwiZmlsdGVyIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwiYWRkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2NfZHBkX3BhcmNlbHNob3BfbWFwX3dpZGdldF9zZXR0aW5ncyIsImFqYXhfdXJsIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIkRPTkUiLCJPSyIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJzZW5kIiwiY2hvc2VuUGFyY2VsU2hvcElkIiwib3B0aW9ucyIsInNlbGVjdGVkUHVkb0lkIiwiZ2V0Q3VzdG9tZXJaaXAiLCJtaW5XZWlnaHRJbktnIiwicGFyc2VJbnQiLCJkaXNhbGxvd1Nob3BzIiwiZGlzYWxsb3dMb2NrZXJzIiwiZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucyIsImRpc2FsbG93U2tQb3N0IiwiZGlzYWxsb3dBbHphQm94ZXMiLCJhbGxvd2VkUHVkb1R5cGVzIiwidHlwZSIsImFsbG93ZWRMb2NrZXJUeXBlcyIsInJlcXVpcmVkU2VydmljZXMiLCJpc0NvZFJlcXVpcmVkIiwiaXNDYXJkUGF5bWVudFJlcXVpcmVkIiwicHVzaCIsImF0dGFjaCIsInRoZW4iLCJwdWRvIiwiaG91c2VubyIsIm1heFdlaWdodEluS2ciLCJzZXJ2aWNlcyIsImluY2x1ZGVzIiwiY29kZSIsInJlbW92ZSIsImNsb3NlIiwic2hpcFRvRGlmZmVyZW50QWRkcmVzcyIsImNoZWNrZWQiLCJzaGlwcGluZ1Bvc3Rjb2RlRmllbGQiLCJiaWxsaW5nUG9zdGNvZGVGaWVsZCIsImRvY1JlYWR5IiwiZm4iLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zY3JpcHRzL2RwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQuanM/NTcwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuZHBkUGFyY2VsU2hvcFdpZGdldCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciBtYXBXaWRnZXRQb3B1cFNlbGVjdG9yLFxuXHRcdHBvcHVwLFxuXHRcdGRwZE1hcFdpZGdldCxcblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yLFxuXHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yLFxuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRUZXh0U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFB1c0lkU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbE5hbWVTZWxlY3Rvcixcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3Rvcixcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IsXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IsXG5cdFx0ZHBkTWFwV2lkZ2V0RWwsXG5cdFx0Y3VzdG9tZXJaaXAsXG5cdFx0Y291bnRyaWVzLFxuXHRcdGJhc2VDb3VudHJ5Q29kZSxcblx0XHRpc01hcEluaXRpYWxpemVkID0gZmFsc2U7XG5cblx0ZnVuY3Rpb24gaW5pdCgpIHtcblx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvciA9XG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQtb3Blbi1wb3B1cC1idG4nO1xuXG5cdFx0bWFwV2lkZ2V0UG9wdXBTZWxlY3RvciA9ICcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cCc7XG5cblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cC1jb250YWluZXInO1xuXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciA9ICcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNvbnRlbnQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNob3Nlbi1wYXJjZWxzaG9wLXRleHQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtaWQnO1xuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxQdXNJZFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtcHVzLWlkJztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsTmFtZVNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtbmFtZSc7XG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3Atc3RyZWV0Jztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY2l0eSc7XG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yID1cblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtemlwJztcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ291bnRyeUNvZGVTZWxlY3RvciA9XG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLWNvdW50cnktY29kZSc7XG5cblx0XHRwb3B1cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobWFwV2lkZ2V0UG9wdXBTZWxlY3Rvcik7XG5cblx0XHQvKipcblx0XHQgKiBPcGVuIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgb3BlbiBidXR0b25cblx0XHQgKi9cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2NsaWNrJyxcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0Ly8gRmV0Y2ggdGhlIGRwZE1hcFdpZGdldEVsIGVsZW1lbnQgZHluYW1pY2FsbHlcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtbWFwLXdpZGdldC1wb3B1cC1lbWJlZCdcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoIWRwZE1hcFdpZGdldEVsKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmV0Y2ggdGhlIGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsIGVsZW1lbnQgZHluYW1pY2FsbHlcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwgPSBldmVudC50YXJnZXQuY2xvc2VzdChcblx0XHRcdFx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvclxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmICghZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbml0TWFwKCk7XG5cdFx0XHRcdG9wZW5Qb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIGl0XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdCdjbGljaycsXG5cdFx0XHRmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSBlc2NhcGUga2V5IGlzIHByZXNzZWRcblx0XHQgKi9cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0J2tleWRvd24nLFxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0fSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXIgdGhlIHVwZGF0ZV9jaGVja291dCBldmVudCB3aGVuIHRoZSBwYXltZW50IG1ldGhvZCBpcyBjaGFuZ2VkIGFuZCBhIHBhcmNlbCBzaG9wIGlzIGNob3NlblxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHQnY2hhbmdlJyxcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0ICYmXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0W25hbWU9XCJwYXltZW50X21ldGhvZFwiXScpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGEgcGFyY2VsIHNob3AgaXMgY2hvc2VuXG5cdFx0XHRcdFx0aWYgKGlzUGFyY2VsU2hvcENob3NlbigpKSB7XG5cdFx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSB1cGRhdGVfY2hlY2tvdXQgZXZlbnRcblx0XHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3VwZGF0ZV9jaGVja291dCcpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZSB0aGUgbWFwXG5cdCAqL1xuXHRmdW5jdGlvbiBpbml0TWFwKCkge1xuXHRcdGlmIChpc01hcEluaXRpYWxpemVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBpS2V5ID0gZHBkTWFwV2lkZ2V0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFwaS1rZXknKTtcblxuXHRcdGlmICghYXBpS2V5KSB7XG5cdFx0XHRjb25zb2xlLmxvZygnTWFwIEFwaSBrZXkgaXMgbWlzc2luZycpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvdW50cmllcyA9IEpTT04ucGFyc2UoXG5cdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY291bnRyaWVzJylcblx0XHQpO1xuXHRcdGFsbG93ZWRDb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuXHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFsbG93ZWQtY291bnRyaWVzJylcblx0XHQpO1xuXHRcdGFsbG93ZWRDb3VudHJpZXMgPSBhbGxvd2VkQ291bnRyaWVzLmpvaW4oJywnKTtcblx0XHRiYXNlQ291bnRyeUNvZGUgPSBkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcblx0XHQpO1xuXG5cdFx0ZHBkTWFwV2lkZ2V0ID0gbmV3IERwZFB1ZG8uV2lkZ2V0KHtcblx0XHRcdGFwaUtleTogYXBpS2V5LFxuXHRcdFx0Y291bnRyeTogYmFzZUNvdW50cnlDb2RlLFxuXHRcdFx0YWxsb3dlZENvdW50cmllczogW2FsbG93ZWRDb3VudHJpZXNdLFxuXHRcdH0pO1xuXG5cdFx0aXNNYXBJbml0aWFsaXplZCA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzZWxlY3RlZCBwYXJjZWwgc2hvcCBpbiB0aGUgc2Vzc2lvbiBhbmQgdXBkYXRlIHRoZSBmcm9udGVuZCBmaWVsZFxuXHQgKi9cblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wKGRhdGEgPSB7fSkge1xuXHRcdGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJjZWxTaG9wSWQgPSBkYXRhLmhhc093blByb3BlcnR5KCdpZCcpID8gZGF0YS5pZCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcFB1c0lkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xuXHRcdGNvbnN0IHBhcmNlbFNob3BOYW1lID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpID8gZGF0YS5uYW1lIDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wU3RyZWV0ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0JykgPyBkYXRhLnN0cmVldCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcFppcCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3ppcCcpID8gZGF0YS56aXAgOiBudWxsO1xuXHRcdGNvbnN0IHBhcmNlbFNob3BDaXR5ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY2l0eScpID8gZGF0YS5jaXR5IDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wQ291bnRyeUNvZGUgPSBkYXRhLmhhc093blByb3BlcnR5KCdjb3VudHJ5Q29kZScpXG5cdFx0XHQ/IGRhdGEuY291bnRyeUNvZGVcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wTWF4V2VpZ2h0ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnbWF4d2VpZ2h0Jylcblx0XHRcdD8gZGF0YS5tYXh3ZWlnaHRcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBwYXJjZWxTaG9wQ29kID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY29kJykgPyBkYXRhLmNvZCA6IG51bGw7XG5cdFx0Y29uc3QgcGFyY2VsU2hvcENhcmQgPSBkYXRhLmhhc093blByb3BlcnR5KCdjYXJkJykgPyBkYXRhLmNhcmQgOiBudWxsO1xuXHRcdGNvbnN0IGlzRWxpZ2libGVGb3JBbHphYm94ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXNFbGlnaWJsZUZvckFsemFib3gnKVxuXHRcdFx0PyBkYXRhLmlzRWxpZ2libGVGb3JBbHphYm94XG5cdFx0XHQ6IG51bGw7XG5cdFx0Y29uc3QgaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID0gZGF0YS5oYXNPd25Qcm9wZXJ0eShcblx0XHRcdCdpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gnXG5cdFx0KVxuXHRcdFx0PyBkYXRhLmlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxuXHRcdFx0OiBudWxsO1xuXG5cdFx0Ly8gVXBkYXRlIHNlc3Npb25cblx0XHRzZXRTZWxlY3RlZFBhcmNlbFNob3BTZXNzaW9uKFxuXHRcdFx0cGFyY2VsU2hvcElkLFxuXHRcdFx0cGFyY2VsU2hvcFB1c0lkLFxuXHRcdFx0cGFyY2VsU2hvcE5hbWUsXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0LFxuXHRcdFx0cGFyY2VsU2hvcFppcCxcblx0XHRcdHBhcmNlbFNob3BDaXR5LFxuXHRcdFx0cGFyY2VsU2hvcENvdW50cnlDb2RlLFxuXHRcdFx0cGFyY2VsU2hvcE1heFdlaWdodCxcblx0XHRcdHBhcmNlbFNob3BDb2QsXG5cdFx0XHRwYXJjZWxTaG9wQ2FyZCxcblx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94LFxuXHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XG5cdFx0KTtcblxuXHRcdGNvbnN0IHBhcmNlbFNob3BDb3VudHJ5ID1cblx0XHRcdGNvdW50cmllcyAmJlxuXHRcdFx0dHlwZW9mIGNvdW50cmllcyA9PT0gJ29iamVjdCcgJiZcblx0XHRcdGNvdW50cmllcy5oYXNPd25Qcm9wZXJ0eShwYXJjZWxTaG9wQ291bnRyeUNvZGUpXG5cdFx0XHRcdD8gY291bnRyaWVzW3BhcmNlbFNob3BDb3VudHJ5Q29kZV1cblx0XHRcdFx0OiBwYXJjZWxTaG9wQ291bnRyeUNvZGU7XG5cblx0XHQvLyBVcGRhdGUgZnJvbnRlbmQgZmllbGRcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yKS52YWx1ZSA9XG5cdFx0XHRwYXJjZWxTaG9wSWQ7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvcikudmFsdWUgPVxuXHRcdFx0cGFyY2VsU2hvcFB1c0lkO1xuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbE5hbWVTZWxlY3RvcikudmFsdWUgPVxuXHRcdFx0cGFyY2VsU2hvcE5hbWU7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IpLnZhbHVlID1cblx0XHRcdHBhcmNlbFNob3BTdHJlZXQ7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IpLnZhbHVlID1cblx0XHRcdHBhcmNlbFNob3BaaXA7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yKS52YWx1ZSA9XG5cdFx0XHRwYXJjZWxTaG9wQ2l0eTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3Jcblx0XHQpLnZhbHVlID0gcGFyY2VsU2hvcENvdW50cnlDb2RlO1xuXG5cdFx0Ly8gRmlsdGVyIG91dCBlbXB0eSB2YWx1ZXNcblx0XHRjb25zdCBub3RFbXB0eUFkZHJlc3NWYWx1ZXMgPSBPYmplY3QudmFsdWVzKFtcblx0XHRcdHBhcmNlbFNob3BOYW1lLFxuXHRcdFx0cGFyY2VsU2hvcFN0cmVldCxcblx0XHRcdHBhcmNlbFNob3BaaXAsXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eSxcblx0XHRcdHBhcmNlbFNob3BDb3VudHJ5LFxuXHRcdF0pLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xuXG5cdFx0Ly8gQ29uc3RydWN0IHRoZSB0ZXh0IGNvbnRlbnRcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yKS5pbm5lckhUTUwgPVxuXHRcdFx0bm90RW1wdHlBZGRyZXNzVmFsdWVzLmpvaW4oJywgJyk7XG5cblx0XHRkb2N1bWVudFxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3Rvcilcblx0XHRcdC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uXG5cdCAqL1xuXHRmdW5jdGlvbiBzZXRTZWxlY3RlZFBhcmNlbFNob3BTZXNzaW9uKFxuXHRcdHBhcmNlbFNob3BJZCA9ICcnLFxuXHRcdHBhcmNlbFNob3BQdXNJZCA9ICcnLFxuXHRcdHBhcmNlbFNob3BOYW1lID0gJycsXG5cdFx0cGFyY2VsU2hvcFN0cmVldCA9ICcnLFxuXHRcdHBhcmNlbFNob3BaaXAgPSAnJyxcblx0XHRwYXJjZWxTaG9wQ2l0eSA9ICcnLFxuXHRcdHBhcmNlbFNob3BDb3VudHJ5Q29kZSA9ICcnLFxuXHRcdHBhcmNlbFNob3BNYXhXZWlnaHQgPSAnJyxcblx0XHRwYXJjZWxTaG9wQ29kID0gJycsXG5cdFx0cGFyY2VsU2hvcENhcmQgPSAnJyxcblx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveCA9IHRydWUsXG5cdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID0gdHJ1ZVxuXHQpIHtcblx0XHQvLyBQcmVwYXJlIFhIUiBSZXF1ZXN0LlxuXHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHR4aHIub3BlbignUE9TVCcsIHdjX2RwZF9wYXJjZWxzaG9wX21hcF93aWRnZXRfc2V0dGluZ3MuYWpheF91cmwsIHRydWUpO1xuXHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG5cblx0XHQvLyBDYWxsYmFjayBvbiByZXNwb25zZS5cblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gcmVhZHlTdGF0ZSA0IG1lYW5zIHRoZSByZXF1ZXN0IGlzIGRvbmUuXG5cdFx0XHR2YXIgRE9ORSA9IDQ7XG5cblx0XHRcdC8vIHN0YXR1cyAyMDAgaXMgYSBzdWNjZXNzZnVsIHJldHVybi5cblx0XHRcdHZhciBPSyA9IDIwMDtcblxuXHRcdFx0Ly8gQ2hlY2sgcmVzcG9uc2UuXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT09IERPTkUpIHtcblx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPT09IE9LKSB7XG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgndXBkYXRlX2NoZWNrb3V0JykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEZpbmFsbHkgZG8gdGhlIGNhbGwgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGV0cnMuXG5cdFx0eGhyLnNlbmQoXG5cdFx0XHQnYWN0aW9uPXdjX2RwZF91cGRhdGVfY2hvc2VuX3BhcmNlbHNob3Amd3Bfbm9uY2U9JyArXG5cdFx0XHRcdHBvcHVwLmdldEF0dHJpYnV0ZSgnZGF0YS1ub25jZScpICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcElkICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9wdXNfaWQ9JyArXG5cdFx0XHRcdHBhcmNlbFNob3BQdXNJZCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbmFtZT0nICtcblx0XHRcdFx0cGFyY2VsU2hvcE5hbWUgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX3N0cmVldD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcFN0cmVldCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfemlwPScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wWmlwICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9jaXR5PScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wQ2l0eSArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfY291bnRyeV9jb2RlPScgK1xuXHRcdFx0XHRwYXJjZWxTaG9wQ291bnRyeUNvZGUgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX21heF93ZWlnaHQ9JyArXG5cdFx0XHRcdHBhcmNlbFNob3BNYXhXZWlnaHQgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcENvZCArXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfY2FyZD0nICtcblx0XHRcdFx0cGFyY2VsU2hvcENhcmQgK1xuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2lzX2FsemFib3hfZWxpZ2libGU9JyArXG5cdFx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94ICtcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pc19zbG92ZW5za2FfcG9zdGFfZWxpZ2libGU9JyArXG5cdFx0XHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbiB0aGUgcG9wdXBcblx0ICovXG5cdGZ1bmN0aW9uIG9wZW5Qb3B1cCgpIHtcblx0XHRwb3B1cC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblxuXHRcdGlmIChkcGRNYXBXaWRnZXRFbCAmJiBkcGRNYXBXaWRnZXQpIHtcblx0XHRcdGNvbnN0IGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXG5cdFx0XHQpLnZhbHVlO1xuXG5cdFx0XHRpZiAoY2hvc2VuUGFyY2VsU2hvcElkKSB7XG5cdFx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLnNlbGVjdGVkUHVkb0lkID0gY2hvc2VuUGFyY2VsU2hvcElkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNlbGVjdCBvcGVuIGJ1dHRvbiB0byBnZXQgcmVmcmVzaGVkIGRhdGFcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0bWFwV2lkZ2V0UG9wdXBPcGVuQnRuU2VsZWN0b3Jcblx0XHRcdCk7XG5cblx0XHRcdC8vIEFkZCB6aXAgaWYgYXZhaWxhYmxlXG5cdFx0XHRjdXN0b21lclppcCA9IGdldEN1c3RvbWVyWmlwKCk7XG5cblx0XHRcdGlmIChjdXN0b21lclppcCkge1xuXHRcdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy56aXAgPSBjdXN0b21lclppcDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IHRoZSBzZWxlY3RlZCBjdXN0b21lciBjb3VudHJ5XG5cdFx0XHRjb25zdCBjb3VudHJ5Q29kZSA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0J2RhdGEtYmFzZS1jb3VudHJ5LWNvZGUnXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY291bnRyeUNvZGUpIHtcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuY291bnRyeSA9IGNvdW50cnlDb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVcGRhdGUgd2VpZ2h0IGFuZCBhbGxvd2VkIGxvY2tlciB0eXBlcyB3aGVuIG9wZW5pbmcgdGhlIHBvcHVwXG5cdFx0XHRjb25zdCBtaW5XZWlnaHRJbktnID0gcGFyc2VJbnQoXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1taW4td2VpZ2h0LWluLWtnJylcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yQWx6YWJveCA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnZGF0YS1pcy1lbGlnaWJsZS1mb3ItYWx6YWJveCdcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xuXHRcdFx0Y29uc3QgaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94ID1cblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdCdkYXRhLWlzLWVsaWdpYmxlLWZvci1zbG92ZW5za2EtcG9zdGEtYm94J1xuXHRcdFx0XHQpID09PSAndHJ1ZSc7XG5cblx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLm1pbldlaWdodEluS2cgPSBtaW5XZWlnaHRJbktnO1xuXG5cdFx0XHRjb25zdCBkaXNhbGxvd1Nob3BzID1cblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LXNob3BzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGRpc2FsbG93TG9ja2VycyA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1sb2NrZXJzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGRpc2FsbG93RHBkUGlja3VwU3RhdGlvbnMgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0J2RhdGEtZGlzYWxsb3ctZHBkLXBpY2t1cC1zdGF0aW9ucydcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xuXHRcdFx0Y29uc3QgZGlzYWxsb3dTa1Bvc3QgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzYWxsb3ctc2stcG9zdCcpID09PVxuXHRcdFx0XHQndHJ1ZSc7XG5cdFx0XHRjb25zdCBkaXNhbGxvd0FsemFCb3hlcyA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1hbHphLWJveGVzJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblxuXHRcdFx0bGV0IGFsbG93ZWRQdWRvVHlwZXMgPSBbJ3Nob3AnLCAnbG9ja2VyJ107XG5cdFx0XHRpZiAoZGlzYWxsb3dTaG9wcykge1xuXHRcdFx0XHRhbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUgIT09ICdzaG9wJyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGlzYWxsb3dMb2NrZXJzKSB7XG5cdFx0XHRcdGFsbG93ZWRQdWRvVHlwZXMgPSBhbGxvd2VkUHVkb1R5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2xvY2tlcicpO1xuXHRcdFx0fVxuXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcztcblxuXHRcdFx0bGV0IGFsbG93ZWRMb2NrZXJUeXBlcyA9IFtcblx0XHRcdFx0J2RwZFNrUGlja3VwU3RhdGlvbnMnLFxuXHRcdFx0XHQnc2tQb3N0Jyxcblx0XHRcdFx0J2FsemFTbG92YWtpYScsXG5cdFx0XHRcdCdvdXRzaWRlT2ZTbG92YWtpYScsXG5cdFx0XHRdO1xuXG5cdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94IHx8ICFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcblx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yQWx6YWJveCkge1xuXHRcdFx0XHRcdGFsbG93ZWRMb2NrZXJUeXBlcyA9IGFsbG93ZWRMb2NrZXJUeXBlcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2FsemFTbG92YWtpYSdcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWRpc2FsbG93TG9ja2Vycykge1xuXHRcdFx0XHRpZiAoZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucykge1xuXHRcdFx0XHRcdGFsbG93ZWRMb2NrZXJUeXBlcyA9IGFsbG93ZWRMb2NrZXJUeXBlcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2RwZFNrUGlja3VwU3RhdGlvbnMnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlzYWxsb3dTa1Bvc3QpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlzYWxsb3dBbHphQm94ZXMpIHtcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdhbHphU2xvdmFraWEnXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXM7XG5cblx0XHRcdGxldCByZXF1aXJlZFNlcnZpY2VzID0gW107XG5cblx0XHRcdGNvbnN0IGlzQ29kUmVxdWlyZWQgPVxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtY29kLXJlcXVpcmVkJykgPT09XG5cdFx0XHRcdCd0cnVlJztcblx0XHRcdGNvbnN0IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCA9XG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHQnZGF0YS1pcy1jYXJkLXBheW1lbnQtcmVxdWlyZWQnXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcblxuXHRcdFx0aWYgKGlzQ29kUmVxdWlyZWQgfHwgaXNDYXJkUGF5bWVudFJlcXVpcmVkKSB7XG5cdFx0XHRcdGlmIChpc0NvZFJlcXVpcmVkKSB7XG5cdFx0XHRcdFx0cmVxdWlyZWRTZXJ2aWNlcy5wdXNoKCdjb2QnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0NhcmRQYXltZW50UmVxdWlyZWQpIHtcblx0XHRcdFx0XHRyZXF1aXJlZFNlcnZpY2VzLnB1c2goJ2NhcmRQYXltZW50Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMucmVxdWlyZWRTZXJ2aWNlcyA9IHJlcXVpcmVkU2VydmljZXM7XG5cblx0XHRcdGRwZE1hcFdpZGdldFxuXHRcdFx0XHQuYXR0YWNoKGRwZE1hcFdpZGdldEVsKVxuXHRcdFx0XHQudGhlbigocHVkbykgPT4ge1xuXHRcdFx0XHRcdHNldFNlbGVjdGVkUGFyY2VsU2hvcCh7XG5cdFx0XHRcdFx0XHRpZDogcHVkby5pZCxcblx0XHRcdFx0XHRcdG5hbWU6IHB1ZG8ubmFtZSxcblx0XHRcdFx0XHRcdHN0cmVldDogcHVkby5zdHJlZXQsXG5cdFx0XHRcdFx0XHRob3VzZW5vOiBwdWRvLmhvdXNlbm8sXG5cdFx0XHRcdFx0XHR6aXA6IHB1ZG8uemlwLFxuXHRcdFx0XHRcdFx0Y2l0eTogcHVkby5jaXR5LFxuXHRcdFx0XHRcdFx0Y291bnRyeUNvZGU6IHB1ZG8uY291bnRyeUNvZGUsXG5cdFx0XHRcdFx0XHRtYXh3ZWlnaHQ6IHB1ZG8ubWF4V2VpZ2h0SW5LZyxcblx0XHRcdFx0XHRcdGNvZDogcHVkby5zZXJ2aWNlcyAmJiBwdWRvLnNlcnZpY2VzLmluY2x1ZGVzKCdjb2QnKSA/IHRydWUgOiBmYWxzZSxcblx0XHRcdFx0XHRcdGNhcmQ6XG5cdFx0XHRcdFx0XHRcdHB1ZG8uc2VydmljZXMgJiYgcHVkby5zZXJ2aWNlcy5pbmNsdWRlcygnY2FyZFBheW1lbnQnKVxuXHRcdFx0XHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveDogaXNFbGlnaWJsZUZvckFsemFib3gsXG5cdFx0XHRcdFx0XHRpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3g6IGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGNsb3NlUG9wdXAoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChjb2RlKSA9PiB7XG5cdFx0XHRcdFx0Y2xvc2VQb3B1cCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2UgdGhlIHBvcHVwXG5cdCAqL1xuXHRmdW5jdGlvbiBjbG9zZVBvcHVwKCkge1xuXHRcdHBvcHVwLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY2xvc2UgbWV0aG9kIGV4aXN0c1xuXHRcdGlmIChkcGRNYXBXaWRnZXQgJiYgZHBkTWFwV2lkZ2V0LmNsb3NlKSB7XG5cdFx0XHRkcGRNYXBXaWRnZXQuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBwYXJjZWwgc2hvcCBpcyBjaG9zZW5cblx0ICovXG5cdGZ1bmN0aW9uIGlzUGFyY2VsU2hvcENob3NlbigpIHtcblx0XHR2YXIgY2hvc2VuUGFyY2VsU2hvcElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXG5cdFx0KS52YWx1ZTtcblx0XHRyZXR1cm4gY2hvc2VuUGFyY2VsU2hvcElkICE9PSAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgY3VzdG9tZXIgemlwXG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRDdXN0b21lclppcCgpIHtcblx0XHQvLyBDaGVjayBpZiBzaGlwIHRvIGRpZmZlcmVudCBhZGRyZXNzIGlzIGNoZWNrZWRcblx0XHRjb25zdCBzaGlwVG9EaWZmZXJlbnRBZGRyZXNzID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdCdpbnB1dFtuYW1lPVwic2hpcF90b19kaWZmZXJlbnRfYWRkcmVzc1wiXSdcblx0XHQpO1xuXG5cdFx0aWYgKHNoaXBUb0RpZmZlcmVudEFkZHJlc3MgJiYgc2hpcFRvRGlmZmVyZW50QWRkcmVzcy5jaGVja2VkKSB7XG5cdFx0XHRjb25zdCBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHQnaW5wdXRbbmFtZT1cInNoaXBwaW5nX3Bvc3Rjb2RlXCJdJ1xuXHRcdFx0KTtcblxuXHRcdFx0aWYgKHNoaXBwaW5nUG9zdGNvZGVGaWVsZCkge1xuXHRcdFx0XHRjdXN0b21lclppcCA9IHNoaXBwaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1c3RvbWVyWmlwKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0b21lclppcDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBiaWxsaW5nUG9zdGNvZGVGaWVsZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHQnaW5wdXRbbmFtZT1cImJpbGxpbmdfcG9zdGNvZGVcIl0nXG5cdFx0KTtcblxuXHRcdGlmIChiaWxsaW5nUG9zdGNvZGVGaWVsZCkge1xuXHRcdFx0Y3VzdG9tZXJaaXAgPSBiaWxsaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoY3VzdG9tZXJaaXApIHtcblx0XHRcdHJldHVybiBjdXN0b21lclppcDtcblx0XHR9XG5cblx0XHRjdXN0b21lclppcCA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b21lci16aXAnKTtcblxuXHRcdGlmIChjdXN0b21lclppcCkge1xuXHRcdFx0cmV0dXJuIGN1c3RvbWVyWmlwO1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBkb2N1bWVudCBpcyByZWFkeVxuXHQgKi9cblx0ZnVuY3Rpb24gZG9jUmVhZHkoZm4pIHtcblx0XHRpZiAoXG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8XG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnXG5cdFx0KSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZuLCAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0XHR9XG5cdH1cblxuXHRkb2NSZWFkeShmdW5jdGlvbiAoKSB7XG5cdFx0aW5pdCgpO1xuXHR9KTtcblxuXHQvLyBBbGxvdyB0aGUgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGVcblx0cmV0dXJuIHtcblx0XHRvcGVuUG9wdXA6IG9wZW5Qb3B1cCxcblx0fTtcbn0pKCk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQUEsTUFBTSxDQUFDQyxtQkFBbUIsR0FBSSxZQUFZO0VBQ3pDLElBQUlDLHNCQUFzQjtJQUN6QkMsS0FBSztJQUNMQyxZQUFZO0lBQ1pDLCtCQUErQjtJQUMvQkMsNkJB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\n//# sourceURL=webpack-internal:///./assets/scripts/dpd-parcelshop-map-widget.js\n");
     18eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nwindow.dpdParcelShopWidget = function () {\n  var mapWidgetPopupSelector,\n    popup,\n    dpdMapWidget,\n    mapWidgetPopupContainerSelector,\n    mapWidgetPopupOpenBtnSelector,\n    chosenParcelShopContentSelector,\n    chosenParcelShopContentTextSelector,\n    chosenParcelShopHiddenParcelIdSelector,\n    chosenParcelShopHiddenParcelPusIdSelector,\n    chosenParcelShopHiddenParcelNameSelector,\n    chosenParcelShopHiddenParcelStreetSelector,\n    chosenParcelShopHiddenParcelCitySelector,\n    chosenParcelShopHiddenParcelZipSelector,\n    chosenParcelShopHiddenParcelCountryCodeSelector,\n    dpdMapWidgetEl,\n    customerZip,\n    countries,\n    baseCountryCode,\n    isMapInitialized = false;\n  function init() {\n    mapWidgetPopupOpenBtnSelector = '.js-dpd-parcelshop-map-widget-open-popup-btn';\n    mapWidgetPopupSelector = '.js-dpd-parcelshop-map-widget-popup';\n    mapWidgetPopupContainerSelector = '.js-dpd-parcelshop-map-widget-popup-container';\n    chosenParcelShopContentSelector = '.js-dpd-chosen-parcelshop-content';\n    chosenParcelShopContentTextSelector = '.js-dpd-chosen-parcelshop-chosen-parcelshop-text';\n    chosenParcelShopHiddenParcelIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-id';\n    chosenParcelShopHiddenParcelPusIdSelector = '.js-dpd-parcelshop-hidden-parcelshop-pus-id';\n    chosenParcelShopHiddenParcelNameSelector = '.js-dpd-parcelshop-hidden-parcelshop-name';\n    chosenParcelShopHiddenParcelStreetSelector = '.js-dpd-parcelshop-hidden-parcelshop-street';\n    chosenParcelShopHiddenParcelCitySelector = '.js-dpd-parcelshop-hidden-parcelshop-city';\n    chosenParcelShopHiddenParcelZipSelector = '.js-dpd-parcelshop-hidden-parcelshop-zip';\n    chosenParcelShopHiddenParcelCountryCodeSelector = '.js-dpd-parcelshop-hidden-parcelshop-country-code';\n    popup = document.querySelector(mapWidgetPopupSelector);\n\n    /**\r\n     * Open the popup when the user clicks the open button\r\n     */\n    document.addEventListener('click', function (event) {\n      if (!event.target.matches(mapWidgetPopupOpenBtnSelector)) {\n        return;\n      }\n      event.preventDefault();\n\n      // Fetch the dpdMapWidgetEl element dynamically\n      dpdMapWidgetEl = document.querySelector('.js-dpd-parcelshop-map-widget-popup-embed');\n      if (!dpdMapWidgetEl) {\n        return;\n      }\n\n      // Fetch the dpdMapOpenWidgetMapPopupEl element dynamically\n      dpdMapOpenWidgetMapPopupEl = event.target.closest(mapWidgetPopupOpenBtnSelector);\n      if (!dpdMapOpenWidgetMapPopupEl) {\n        return;\n      }\n      initMap();\n      openPopup();\n    }, false);\n\n    /**\r\n     * Close the popup when the user clicks outside of it\r\n     */\n    document.addEventListener('click', function (event) {\n      if (!event.target.matches(mapWidgetPopupContainerSelector)) {\n        return;\n      }\n      event.preventDefault();\n      closePopup();\n    }, false);\n\n    /**\r\n     * Close the popup when the escape key is pressed\r\n     */\n    document.addEventListener('keydown', function (event) {\n      if (event.key !== 'Escape') {\n        return;\n      }\n      closePopup();\n    }, false);\n\n    /**\r\n     * Trigger the update_checkout event when the payment method is changed and a parcel shop is chosen\r\n     */\n    document.addEventListener('change', function (event) {\n      if (event.target && event.target.matches('input[name=\"payment_method\"]')) {\n        // Check if a parcel shop is chosen\n        if (isParcelShopChosen()) {\n          // Trigger the update_checkout event\n          document.body.dispatchEvent(new Event('update_checkout'));\n        }\n      }\n    }, false);\n  }\n\n  /**\r\n   * Initialize the map\r\n   */\n  function initMap() {\n    if (isMapInitialized) {\n      return;\n    }\n    var apiKey = dpdMapWidgetEl.getAttribute('data-api-key');\n    if (!apiKey) {\n      console.log('Map Api key is missing');\n      return;\n    }\n    countries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-countries'));\n    allowedCountries = JSON.parse(dpdMapOpenWidgetMapPopupEl.getAttribute('data-allowed-countries'));\n    allowedCountries = allowedCountries.join(',');\n    baseCountryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n    dpdMapWidget = new DpdPudo.Widget({\n      apiKey: apiKey,\n      country: baseCountryCode,\n      allowedCountries: [allowedCountries]\n    });\n    isMapInitialized = true;\n  }\n\n  /**\r\n   * Set the selected parcel shop in the session and update the frontend field\r\n   */\n  function setSelectedParcelShop() {\n    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!data || Object.keys(data).length === 0) {\n      return;\n    }\n    var parcelShopId = data.hasOwnProperty('id') ? data.id : null;\n    var parcelShopPusId = data.hasOwnProperty('id') ? data.id : null;\n    var parcelShopName = data.hasOwnProperty('name') ? data.name : null;\n    var parcelShopStreet = data.hasOwnProperty('street') ? data.street : null;\n    var parcelShopZip = data.hasOwnProperty('zip') ? data.zip : null;\n    var parcelShopCity = data.hasOwnProperty('city') ? data.city : null;\n    var parcelShopCountryCode = data.hasOwnProperty('countryCode') ? data.countryCode : null;\n    var parcelShopMaxWeight = data.hasOwnProperty('maxweight') ? data.maxweight : null;\n    var parcelShopCod = data.hasOwnProperty('cod') ? data.cod : null;\n    var parcelShopCard = data.hasOwnProperty('card') ? data.card : null;\n    var isEligibleForAlzabox = data.hasOwnProperty('isEligibleForAlzabox') ? data.isEligibleForAlzabox : null;\n    var isEligibleForSlovenskaPostaBox = data.hasOwnProperty('isEligibleForSlovenskaPostaBox') ? data.isEligibleForSlovenskaPostaBox : null;\n\n    // Update session\n    setSelectedParcelShopSession(parcelShopId, parcelShopPusId, parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountryCode, parcelShopMaxWeight, parcelShopCod, parcelShopCard, isEligibleForAlzabox, isEligibleForSlovenskaPostaBox);\n    var parcelShopCountry = countries && _typeof(countries) === 'object' && countries.hasOwnProperty(parcelShopCountryCode) ? countries[parcelShopCountryCode] : parcelShopCountryCode;\n\n    // Update frontend field\n    document.querySelector(chosenParcelShopHiddenParcelIdSelector).value = parcelShopId;\n    document.querySelector(chosenParcelShopHiddenParcelPusIdSelector).value = parcelShopPusId;\n    document.querySelector(chosenParcelShopHiddenParcelNameSelector).value = parcelShopName;\n    document.querySelector(chosenParcelShopHiddenParcelStreetSelector).value = parcelShopStreet;\n    document.querySelector(chosenParcelShopHiddenParcelZipSelector).value = parcelShopZip;\n    document.querySelector(chosenParcelShopHiddenParcelCitySelector).value = parcelShopCity;\n    document.querySelector(chosenParcelShopHiddenParcelCountryCodeSelector).value = parcelShopCountryCode;\n\n    // Filter out empty values\n    var notEmptyAddressValues = Object.values([parcelShopName, parcelShopStreet, parcelShopZip, parcelShopCity, parcelShopCountry]).filter(function (value) {\n      return !!value;\n    });\n\n    // Construct the text content\n    document.querySelector(chosenParcelShopContentTextSelector).innerHTML = notEmptyAddressValues.join(', ');\n    document.querySelector(chosenParcelShopContentSelector).classList.add('active');\n  }\n\n  /**\r\n   * Set the selected parcel shop in the session\r\n   */\n  function setSelectedParcelShopSession() {\n    var parcelShopId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var parcelShopPusId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var parcelShopName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n    var parcelShopStreet = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n    var parcelShopZip = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';\n    var parcelShopCity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';\n    var parcelShopCountryCode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : '';\n    var parcelShopMaxWeight = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : '';\n    var parcelShopCod = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : '';\n    var parcelShopCard = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : '';\n    var isEligibleForAlzabox = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : true;\n    var isEligibleForSlovenskaPostaBox = arguments.length > 11 && arguments[11] !== undefined ? arguments[11] : true;\n    // Prepare XHR Request.\n    var xhr = new XMLHttpRequest();\n    xhr.open('POST', wc_dpd_parcelshop_map_widget_settings.ajax_url, true);\n    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n    // Callback on response.\n    xhr.onreadystatechange = function () {\n      // readyState 4 means the request is done.\n      var DONE = 4;\n\n      // status 200 is a successful return.\n      var OK = 200;\n\n      // Check response.\n      if (xhr.readyState === DONE) {\n        if (xhr.status === OK) {\n          document.body.dispatchEvent(new Event('update_checkout'));\n        }\n      }\n    };\n\n    // Finally do the call with the right parametetrs.\n    xhr.send('action=wc_dpd_update_chosen_parcelshop&wp_nonce=' + popup.getAttribute('data-nonce') + '&wc_dpd_parcelshop_id=' + parcelShopId + '&wc_dpd_parcelshop_pus_id=' + parcelShopPusId + '&wc_dpd_parcelshop_name=' + parcelShopName + '&wc_dpd_parcelshop_street=' + parcelShopStreet + '&wc_dpd_parcelshop_zip=' + parcelShopZip + '&wc_dpd_parcelshop_city=' + parcelShopCity + '&wc_dpd_parcelshop_country_code=' + parcelShopCountryCode + '&wc_dpd_parcelshop_max_weight=' + parcelShopMaxWeight + '&wc_dpd_parcelshop_cod=' + parcelShopCod + '&wc_dpd_parcelshop_card=' + parcelShopCard + '&wc_dpd_parcelshop_is_alzabox_eligible=' + isEligibleForAlzabox + '&wc_dpd_parcelshop_is_slovenska_posta_eligible=' + isEligibleForSlovenskaPostaBox);\n  }\n\n  /**\r\n   * Open the popup\r\n   */\n  function openPopup() {\n    popup.classList.add('active');\n    if (dpdMapWidgetEl && dpdMapWidget) {\n      var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n      if (chosenParcelShopId) {\n        dpdMapWidget.options.selectedPudoId = chosenParcelShopId;\n      }\n\n      // Reselect open button to get refreshed data\n      dpdMapOpenWidgetMapPopupEl = document.querySelector(mapWidgetPopupOpenBtnSelector);\n\n      // Add zip if available\n      customerZip = getCustomerZip();\n      if (customerZip) {\n        dpdMapWidget.options.zip = customerZip;\n      }\n\n      // Get the selected customer country\n      var countryCode = dpdMapOpenWidgetMapPopupEl.getAttribute('data-base-country-code');\n      if (countryCode) {\n        dpdMapWidget.options.country = countryCode;\n      }\n\n      // Update weight and allowed locker types when opening the popup\n      var minWeightInKg = parseInt(dpdMapOpenWidgetMapPopupEl.getAttribute('data-min-weight-in-kg'));\n      var isEligibleForAlzabox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-alzabox') === 'true';\n      var isEligibleForSlovenskaPostaBox = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-eligible-for-slovenska-posta-box') === 'true';\n      dpdMapWidget.options.minWeightInKg = minWeightInKg;\n      var disallowShops = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-shops') === 'true';\n      var disallowLockers = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-lockers') === 'true';\n      var disallowDpdPickupStations = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-dpd-pickup-stations') === 'true';\n      var disallowSkPost = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-sk-post') === 'true';\n      var disallowAlzaBoxes = dpdMapOpenWidgetMapPopupEl.getAttribute('data-disallow-alza-boxes') === 'true';\n      var allowedPudoTypes = ['shop', 'locker'];\n      if (disallowShops) {\n        allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n          return type !== 'shop';\n        });\n      }\n      if (disallowLockers) {\n        allowedPudoTypes = allowedPudoTypes.filter(function (type) {\n          return type !== 'locker';\n        });\n      }\n      dpdMapWidget.options.allowedPudoTypes = allowedPudoTypes;\n      var allowedLockerTypes = ['dpdSkPickupStations', 'skPost', 'alzaSlovakia', 'outsideOfSlovakia'];\n      if (!isEligibleForAlzabox || !isEligibleForSlovenskaPostaBox) {\n        if (!isEligibleForAlzabox) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'alzaSlovakia';\n          });\n        }\n        if (!isEligibleForSlovenskaPostaBox) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'skPost';\n          });\n        }\n      }\n      if (!disallowLockers) {\n        if (disallowDpdPickupStations) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'dpdSkPickupStations';\n          });\n        }\n        if (disallowSkPost) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'skPost';\n          });\n        }\n        if (disallowAlzaBoxes) {\n          allowedLockerTypes = allowedLockerTypes.filter(function (type) {\n            return type !== 'alzaSlovakia';\n          });\n        }\n      }\n      dpdMapWidget.options.allowedLockerTypes = allowedLockerTypes;\n      var requiredServices = [];\n      var isCodRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-cod-required') === 'true';\n      var isCardPaymentRequired = dpdMapOpenWidgetMapPopupEl.getAttribute('data-is-card-payment-required') === 'true';\n      if (isCodRequired || isCardPaymentRequired) {\n        if (isCodRequired) {\n          requiredServices.push('cod');\n        }\n        if (isCardPaymentRequired) {\n          requiredServices.push('cardPayment');\n        }\n      }\n      dpdMapWidget.options.requiredServices = requiredServices;\n      dpdMapWidget.attach(dpdMapWidgetEl).then(function (pudo) {\n        setSelectedParcelShop({\n          id: pudo.id,\n          name: pudo.name,\n          street: pudo.street,\n          houseno: pudo.houseno,\n          zip: pudo.zip,\n          city: pudo.city,\n          countryCode: pudo.countryCode,\n          maxweight: pudo.maxWeightInKg,\n          cod: pudo.services && pudo.services.includes('cod') ? true : false,\n          card: pudo.services && pudo.services.includes('cardPayment') ? true : false,\n          isEligibleForAlzabox: isEligibleForAlzabox,\n          isEligibleForSlovenskaPostaBox: isEligibleForSlovenskaPostaBox\n        });\n        closePopup();\n      })[\"catch\"](function (code) {\n        closePopup();\n      });\n    }\n  }\n\n  /**\r\n   * Close the popup\r\n   */\n  function closePopup() {\n    popup.classList.remove('active');\n\n    // Check if close method exists\n    if (dpdMapWidget && dpdMapWidget.close) {\n      dpdMapWidget.close();\n    }\n  }\n\n  /**\r\n   * Check if a parcel shop is chosen\r\n   */\n  function isParcelShopChosen() {\n    var chosenParcelShopId = document.querySelector(chosenParcelShopHiddenParcelIdSelector).value;\n    return chosenParcelShopId !== '';\n  }\n\n  /**\r\n   * Get customer zip\r\n   */\n  function getCustomerZip() {\n    // Check if ship to different address is checked\n    var shipToDifferentAddress = document.querySelector('input[name=\"ship_to_different_address\"]');\n    if (shipToDifferentAddress && shipToDifferentAddress.checked) {\n      var shippingPostcodeField = document.querySelector('input[name=\"shipping_postcode\"]');\n      if (shippingPostcodeField) {\n        customerZip = shippingPostcodeField.value;\n      }\n      if (customerZip) {\n        return customerZip;\n      }\n    }\n    var billingPostcodeField = document.querySelector('input[name=\"billing_postcode\"]');\n    if (billingPostcodeField) {\n      customerZip = billingPostcodeField.value;\n    }\n    if (customerZip) {\n      return customerZip;\n    }\n    customerZip = dpdMapOpenWidgetMapPopupEl.getAttribute('data-customer-zip');\n    if (customerZip) {\n      return customerZip;\n    }\n    return '';\n  }\n\n  /**\r\n   * Check if document is ready\r\n   */\n  function docReady(fn) {\n    if (document.readyState === 'complete' || document.readyState === 'interactive') {\n      setTimeout(fn, 1);\n    } else {\n      document.addEventListener('DOMContentLoaded', fn);\n    }\n  }\n  docReady(function () {\n    init();\n  });\n\n  // Allow the functions to be called from outside\n  return {\n    openPopup: openPopup\n  };\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJkcGRQYXJjZWxTaG9wV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBTZWxlY3RvciIsInBvcHVwIiwiZHBkTWFwV2lkZ2V0IiwibWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvciIsIm1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciIsImNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsU3RyZWV0U2VsZWN0b3IiLCJjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ2l0eVNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFppcFNlbGVjdG9yIiwiY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENvdW50cnlDb2RlU2VsZWN0b3IiLCJkcGRNYXBXaWRnZXRFbCIsImN1c3RvbWVyWmlwIiwiY291bnRyaWVzIiwiYmFzZUNvdW50cnlDb2RlIiwiaXNNYXBJbml0aWFsaXplZCIsImluaXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0YXJnZXQiLCJtYXRjaGVzIiwicHJldmVudERlZmF1bHQiLCJkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCIsImNsb3Nlc3QiLCJpbml0TWFwIiwib3BlblBvcHVwIiwiY2xvc2VQb3B1cCIsImtleSIsImlzUGFyY2VsU2hvcENob3NlbiIsImJvZHkiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJhcGlLZXkiLCJnZXRBdHRyaWJ1dGUiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInBhcnNlIiwiYWxsb3dlZENvdW50cmllcyIsImpvaW4iLCJEcGRQdWRvIiwiV2lkZ2V0IiwiY291bnRyeSIsInNldFNlbGVjdGVkUGFyY2VsU2hvcCIsImRhdGEiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwicGFyY2VsU2hvcElkIiwiaGFzT3duUHJvcGVydHkiLCJpZCIsInBhcmNlbFNob3BQdXNJZCIsInBhcmNlbFNob3BOYW1lIiwibmFtZSIsInBhcmNlbFNob3BTdHJlZXQiLCJzdHJlZXQiLCJwYXJjZWxTaG9wWmlwIiwiemlwIiwicGFyY2VsU2hvcENpdHkiLCJjaXR5IiwicGFyY2VsU2hvcENvdW50cnlDb2RlIiwiY291bnRyeUNvZGUiLCJwYXJjZWxTaG9wTWF4V2VpZ2h0IiwibWF4d2VpZ2h0IiwicGFyY2VsU2hvcENvZCIsImNvZCIsInBhcmNlbFNob3BDYXJkIiwiY2FyZCIsImlzRWxpZ2libGVGb3JBbHphYm94IiwiaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94Iiwic2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbiIsInBhcmNlbFNob3BDb3VudHJ5IiwiX3R5cGVvZiIsInZhbHVlIiwibm90RW1wdHlBZGRyZXNzVmFsdWVzIiwidmFsdWVzIiwiZmlsdGVyIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwiYWRkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2NfZHBkX3BhcmNlbHNob3BfbWFwX3dpZGdldF9zZXR0aW5ncyIsImFqYXhfdXJsIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIkRPTkUiLCJPSyIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJzZW5kIiwiY2hvc2VuUGFyY2VsU2hvcElkIiwib3B0aW9ucyIsInNlbGVjdGVkUHVkb0lkIiwiZ2V0Q3VzdG9tZXJaaXAiLCJtaW5XZWlnaHRJbktnIiwicGFyc2VJbnQiLCJkaXNhbGxvd1Nob3BzIiwiZGlzYWxsb3dMb2NrZXJzIiwiZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucyIsImRpc2FsbG93U2tQb3N0IiwiZGlzYWxsb3dBbHphQm94ZXMiLCJhbGxvd2VkUHVkb1R5cGVzIiwidHlwZSIsImFsbG93ZWRMb2NrZXJUeXBlcyIsInJlcXVpcmVkU2VydmljZXMiLCJpc0NvZFJlcXVpcmVkIiwiaXNDYXJkUGF5bWVudFJlcXVpcmVkIiwicHVzaCIsImF0dGFjaCIsInRoZW4iLCJwdWRvIiwiaG91c2VubyIsIm1heFdlaWdodEluS2ciLCJzZXJ2aWNlcyIsImluY2x1ZGVzIiwiY29kZSIsInJlbW92ZSIsImNsb3NlIiwic2hpcFRvRGlmZmVyZW50QWRkcmVzcyIsImNoZWNrZWQiLCJzaGlwcGluZ1Bvc3Rjb2RlRmllbGQiLCJiaWxsaW5nUG9zdGNvZGVGaWVsZCIsImRvY1JlYWR5IiwiZm4iLCJzZXRUaW1lb3V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9zY3JpcHRzL2RwZC1wYXJjZWxzaG9wLW1hcC13aWRnZXQuanM/NTcwNyJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuZHBkUGFyY2VsU2hvcFdpZGdldCA9IChmdW5jdGlvbiAoKSB7XHJcblx0dmFyIG1hcFdpZGdldFBvcHVwU2VsZWN0b3IsXHJcblx0XHRwb3B1cCxcclxuXHRcdGRwZE1hcFdpZGdldCxcclxuXHRcdG1hcFdpZGdldFBvcHVwQ29udGFpbmVyU2VsZWN0b3IsXHJcblx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BDb250ZW50U2VsZWN0b3IsXHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wQ29udGVudFRleHRTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFB1c0lkU2VsZWN0b3IsXHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsTmFtZVNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yLFxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxaaXBTZWxlY3RvcixcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxDb3VudHJ5Q29kZVNlbGVjdG9yLFxyXG5cdFx0ZHBkTWFwV2lkZ2V0RWwsXHJcblx0XHRjdXN0b21lclppcCxcclxuXHRcdGNvdW50cmllcyxcclxuXHRcdGJhc2VDb3VudHJ5Q29kZSxcclxuXHRcdGlzTWFwSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcblx0ZnVuY3Rpb24gaW5pdCgpIHtcclxuXHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LW9wZW4tcG9wdXAtYnRuJztcclxuXHJcblx0XHRtYXBXaWRnZXRQb3B1cFNlbGVjdG9yID0gJy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwJztcclxuXHJcblx0XHRtYXBXaWRnZXRQb3B1cENvbnRhaW5lclNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwLWNvbnRhaW5lcic7XHJcblxyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRTZWxlY3RvciA9ICcuanMtZHBkLWNob3Nlbi1wYXJjZWxzaG9wLWNvbnRlbnQnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcENvbnRlbnRUZXh0U2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1jaG9zZW4tcGFyY2Vsc2hvcC1jaG9zZW4tcGFyY2Vsc2hvcC10ZXh0JztcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1oaWRkZW4tcGFyY2Vsc2hvcC1pZCc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtcHVzLWlkJztcclxuXHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLW5hbWUnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbFN0cmVldFNlbGVjdG9yID1cclxuXHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1oaWRkZW4tcGFyY2Vsc2hvcC1zdHJlZXQnO1xyXG5cdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY2l0eSc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IgPVxyXG5cdFx0XHQnLmpzLWRwZC1wYXJjZWxzaG9wLWhpZGRlbi1wYXJjZWxzaG9wLXppcCc7XHJcblx0XHRjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsQ291bnRyeUNvZGVTZWxlY3RvciA9XHJcblx0XHRcdCcuanMtZHBkLXBhcmNlbHNob3AtaGlkZGVuLXBhcmNlbHNob3AtY291bnRyeS1jb2RlJztcclxuXHJcblx0XHRwb3B1cCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobWFwV2lkZ2V0UG9wdXBTZWxlY3Rvcik7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgb3BlbiBidXR0b25cclxuXHRcdCAqL1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J2NsaWNrJyxcclxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XHJcblx0XHRcdFx0aWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvcikpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdC8vIEZldGNoIHRoZSBkcGRNYXBXaWRnZXRFbCBlbGVtZW50IGR5bmFtaWNhbGx5XHJcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0Jy5qcy1kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LXBvcHVwLWVtYmVkJ1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmICghZHBkTWFwV2lkZ2V0RWwpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEZldGNoIHRoZSBkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCBlbGVtZW50IGR5bmFtaWNhbGx5XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwgPSBldmVudC50YXJnZXQuY2xvc2VzdChcclxuXHRcdFx0XHRcdG1hcFdpZGdldFBvcHVwT3BlbkJ0blNlbGVjdG9yXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0aWYgKCFkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aW5pdE1hcCgpO1xyXG5cdFx0XHRcdG9wZW5Qb3B1cCgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENsb3NlIHRoZSBwb3B1cCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIGl0XHJcblx0XHQgKi9cclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdCdjbGljaycsXHJcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMobWFwV2lkZ2V0UG9wdXBDb250YWluZXJTZWxlY3RvcikpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbG9zZSB0aGUgcG9wdXAgd2hlbiB0aGUgZXNjYXBlIGtleSBpcyBwcmVzc2VkXHJcblx0XHQgKi9cclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcblx0XHRcdCdrZXlkb3duJyxcclxuXHRcdFx0ZnVuY3Rpb24gKGV2ZW50KSB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LmtleSAhPT0gJ0VzY2FwZScpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUcmlnZ2VyIHRoZSB1cGRhdGVfY2hlY2tvdXQgZXZlbnQgd2hlbiB0aGUgcGF5bWVudCBtZXRob2QgaXMgY2hhbmdlZCBhbmQgYSBwYXJjZWwgc2hvcCBpcyBjaG9zZW5cclxuXHRcdCAqL1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuXHRcdFx0J2NoYW5nZScsXHJcblx0XHRcdGZ1bmN0aW9uIChldmVudCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGV2ZW50LnRhcmdldCAmJlxyXG5cdFx0XHRcdFx0ZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0W25hbWU9XCJwYXltZW50X21ldGhvZFwiXScpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBpZiBhIHBhcmNlbCBzaG9wIGlzIGNob3NlblxyXG5cdFx0XHRcdFx0aWYgKGlzUGFyY2VsU2hvcENob3NlbigpKSB7XHJcblx0XHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIHVwZGF0ZV9jaGVja291dCBldmVudFxyXG5cdFx0XHRcdFx0XHRkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCd1cGRhdGVfY2hlY2tvdXQnKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemUgdGhlIG1hcFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGluaXRNYXAoKSB7XHJcblx0XHRpZiAoaXNNYXBJbml0aWFsaXplZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYXBpS2V5ID0gZHBkTWFwV2lkZ2V0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLWFwaS1rZXknKTtcclxuXHJcblx0XHRpZiAoIWFwaUtleSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnTWFwIEFwaSBrZXkgaXMgbWlzc2luZycpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y291bnRyaWVzID0gSlNPTi5wYXJzZShcclxuXHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWNvdW50cmllcycpXHJcblx0XHQpO1xyXG5cdFx0YWxsb3dlZENvdW50cmllcyA9IEpTT04ucGFyc2UoXHJcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1hbGxvd2VkLWNvdW50cmllcycpXHJcblx0XHQpO1xyXG5cdFx0YWxsb3dlZENvdW50cmllcyA9IGFsbG93ZWRDb3VudHJpZXMuam9pbignLCcpO1xyXG5cdFx0YmFzZUNvdW50cnlDb2RlID0gZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcclxuXHRcdCk7XHJcblxyXG5cdFx0ZHBkTWFwV2lkZ2V0ID0gbmV3IERwZFB1ZG8uV2lkZ2V0KHtcclxuXHRcdFx0YXBpS2V5OiBhcGlLZXksXHJcblx0XHRcdGNvdW50cnk6IGJhc2VDb3VudHJ5Q29kZSxcclxuXHRcdFx0YWxsb3dlZENvdW50cmllczogW2FsbG93ZWRDb3VudHJpZXNdLFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aXNNYXBJbml0aWFsaXplZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uIGFuZCB1cGRhdGUgdGhlIGZyb250ZW5kIGZpZWxkXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wKGRhdGEgPSB7fSkge1xyXG5cdFx0aWYgKCFkYXRhIHx8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcElkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFB1c0lkID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGRhdGEuaWQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcE5hbWUgPSBkYXRhLmhhc093blByb3BlcnR5KCduYW1lJykgPyBkYXRhLm5hbWUgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFN0cmVldCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldCcpID8gZGF0YS5zdHJlZXQgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcFppcCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ3ppcCcpID8gZGF0YS56aXAgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENpdHkgPSBkYXRhLmhhc093blByb3BlcnR5KCdjaXR5JykgPyBkYXRhLmNpdHkgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENvdW50cnlDb2RlID0gZGF0YS5oYXNPd25Qcm9wZXJ0eSgnY291bnRyeUNvZGUnKVxyXG5cdFx0XHQ/IGRhdGEuY291bnRyeUNvZGVcclxuXHRcdFx0OiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcE1heFdlaWdodCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ21heHdlaWdodCcpXHJcblx0XHRcdD8gZGF0YS5tYXh3ZWlnaHRcclxuXHRcdFx0OiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENvZCA9IGRhdGEuaGFzT3duUHJvcGVydHkoJ2NvZCcpID8gZGF0YS5jb2QgOiBudWxsO1xyXG5cdFx0Y29uc3QgcGFyY2VsU2hvcENhcmQgPSBkYXRhLmhhc093blByb3BlcnR5KCdjYXJkJykgPyBkYXRhLmNhcmQgOiBudWxsO1xyXG5cdFx0Y29uc3QgaXNFbGlnaWJsZUZvckFsemFib3ggPSBkYXRhLmhhc093blByb3BlcnR5KCdpc0VsaWdpYmxlRm9yQWx6YWJveCcpXHJcblx0XHRcdD8gZGF0YS5pc0VsaWdpYmxlRm9yQWx6YWJveFxyXG5cdFx0XHQ6IG51bGw7XHJcblx0XHRjb25zdCBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3ggPSBkYXRhLmhhc093blByb3BlcnR5KFxyXG5cdFx0XHQnaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94J1xyXG5cdFx0KVxyXG5cdFx0XHQ/IGRhdGEuaXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XHJcblx0XHRcdDogbnVsbDtcclxuXHJcblx0XHQvLyBVcGRhdGUgc2Vzc2lvblxyXG5cdFx0c2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbihcclxuXHRcdFx0cGFyY2VsU2hvcElkLFxyXG5cdFx0XHRwYXJjZWxTaG9wUHVzSWQsXHJcblx0XHRcdHBhcmNlbFNob3BOYW1lLFxyXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0LFxyXG5cdFx0XHRwYXJjZWxTaG9wWmlwLFxyXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eSxcclxuXHRcdFx0cGFyY2VsU2hvcENvdW50cnlDb2RlLFxyXG5cdFx0XHRwYXJjZWxTaG9wTWF4V2VpZ2h0LFxyXG5cdFx0XHRwYXJjZWxTaG9wQ29kLFxyXG5cdFx0XHRwYXJjZWxTaG9wQ2FyZCxcclxuXHRcdFx0aXNFbGlnaWJsZUZvckFsemFib3gsXHJcblx0XHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveFxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBwYXJjZWxTaG9wQ291bnRyeSA9XHJcblx0XHRcdGNvdW50cmllcyAmJlxyXG5cdFx0XHR0eXBlb2YgY291bnRyaWVzID09PSAnb2JqZWN0JyAmJlxyXG5cdFx0XHRjb3VudHJpZXMuaGFzT3duUHJvcGVydHkocGFyY2VsU2hvcENvdW50cnlDb2RlKVxyXG5cdFx0XHRcdD8gY291bnRyaWVzW3BhcmNlbFNob3BDb3VudHJ5Q29kZV1cclxuXHRcdFx0XHQ6IHBhcmNlbFNob3BDb3VudHJ5Q29kZTtcclxuXHJcblx0XHQvLyBVcGRhdGUgZnJvbnRlbmQgZmllbGRcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcElkO1xyXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsUHVzSWRTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wUHVzSWQ7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxOYW1lU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcE5hbWU7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxTdHJlZXRTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wU3RyZWV0O1xyXG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wSGlkZGVuUGFyY2VsWmlwU2VsZWN0b3IpLnZhbHVlID1cclxuXHRcdFx0cGFyY2VsU2hvcFppcDtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbENpdHlTZWxlY3RvcikudmFsdWUgPVxyXG5cdFx0XHRwYXJjZWxTaG9wQ2l0eTtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxDb3VudHJ5Q29kZVNlbGVjdG9yXHJcblx0XHQpLnZhbHVlID0gcGFyY2VsU2hvcENvdW50cnlDb2RlO1xyXG5cclxuXHRcdC8vIEZpbHRlciBvdXQgZW1wdHkgdmFsdWVzXHJcblx0XHRjb25zdCBub3RFbXB0eUFkZHJlc3NWYWx1ZXMgPSBPYmplY3QudmFsdWVzKFtcclxuXHRcdFx0cGFyY2VsU2hvcE5hbWUsXHJcblx0XHRcdHBhcmNlbFNob3BTdHJlZXQsXHJcblx0XHRcdHBhcmNlbFNob3BaaXAsXHJcblx0XHRcdHBhcmNlbFNob3BDaXR5LFxyXG5cdFx0XHRwYXJjZWxTaG9wQ291bnRyeSxcclxuXHRcdF0pLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xyXG5cclxuXHRcdC8vIENvbnN0cnVjdCB0aGUgdGV4dCBjb250ZW50XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNob3NlblBhcmNlbFNob3BDb250ZW50VGV4dFNlbGVjdG9yKS5pbm5lckhUTUwgPVxyXG5cdFx0XHRub3RFbXB0eUFkZHJlc3NWYWx1ZXMuam9pbignLCAnKTtcclxuXHJcblx0XHRkb2N1bWVudFxyXG5cdFx0XHQucXVlcnlTZWxlY3RvcihjaG9zZW5QYXJjZWxTaG9wQ29udGVudFNlbGVjdG9yKVxyXG5cdFx0XHQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdGhlIHNlbGVjdGVkIHBhcmNlbCBzaG9wIGluIHRoZSBzZXNzaW9uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gc2V0U2VsZWN0ZWRQYXJjZWxTaG9wU2Vzc2lvbihcclxuXHRcdHBhcmNlbFNob3BJZCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFB1c0lkID0gJycsXHJcblx0XHRwYXJjZWxTaG9wTmFtZSA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFN0cmVldCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcFppcCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENpdHkgPSAnJyxcclxuXHRcdHBhcmNlbFNob3BDb3VudHJ5Q29kZSA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcE1heFdlaWdodCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENvZCA9ICcnLFxyXG5cdFx0cGFyY2VsU2hvcENhcmQgPSAnJyxcclxuXHRcdGlzRWxpZ2libGVGb3JBbHphYm94ID0gdHJ1ZSxcclxuXHRcdGlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCA9IHRydWVcclxuXHQpIHtcclxuXHRcdC8vIFByZXBhcmUgWEhSIFJlcXVlc3QuXHJcblx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblx0XHR4aHIub3BlbignUE9TVCcsIHdjX2RwZF9wYXJjZWxzaG9wX21hcF93aWRnZXRfc2V0dGluZ3MuYWpheF91cmwsIHRydWUpO1xyXG5cdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuXHJcblx0XHQvLyBDYWxsYmFjayBvbiByZXNwb25zZS5cclxuXHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdC8vIHJlYWR5U3RhdGUgNCBtZWFucyB0aGUgcmVxdWVzdCBpcyBkb25lLlxyXG5cdFx0XHR2YXIgRE9ORSA9IDQ7XHJcblxyXG5cdFx0XHQvLyBzdGF0dXMgMjAwIGlzIGEgc3VjY2Vzc2Z1bCByZXR1cm4uXHJcblx0XHRcdHZhciBPSyA9IDIwMDtcclxuXHJcblx0XHRcdC8vIENoZWNrIHJlc3BvbnNlLlxyXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT09IERPTkUpIHtcclxuXHRcdFx0XHRpZiAoeGhyLnN0YXR1cyA9PT0gT0spIHtcclxuXHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3VwZGF0ZV9jaGVja291dCcpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gRmluYWxseSBkbyB0aGUgY2FsbCB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXRycy5cclxuXHRcdHhoci5zZW5kKFxyXG5cdFx0XHQnYWN0aW9uPXdjX2RwZF91cGRhdGVfY2hvc2VuX3BhcmNlbHNob3Amd3Bfbm9uY2U9JyArXHJcblx0XHRcdFx0cG9wdXAuZ2V0QXR0cmlidXRlKCdkYXRhLW5vbmNlJykgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfaWQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcElkICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX3B1c19pZD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wUHVzSWQgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbmFtZT0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wTmFtZSArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9zdHJlZXQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcFN0cmVldCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF96aXA9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcFppcCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9jaXR5PScgK1xyXG5cdFx0XHRcdHBhcmNlbFNob3BDaXR5ICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvdW50cnlfY29kZT0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wQ291bnRyeUNvZGUgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfbWF4X3dlaWdodD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wTWF4V2VpZ2h0ICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NvZD0nICtcclxuXHRcdFx0XHRwYXJjZWxTaG9wQ29kICtcclxuXHRcdFx0XHQnJndjX2RwZF9wYXJjZWxzaG9wX2NhcmQ9JyArXHJcblx0XHRcdFx0cGFyY2VsU2hvcENhcmQgK1xyXG5cdFx0XHRcdCcmd2NfZHBkX3BhcmNlbHNob3BfaXNfYWx6YWJveF9lbGlnaWJsZT0nICtcclxuXHRcdFx0XHRpc0VsaWdpYmxlRm9yQWx6YWJveCArXHJcblx0XHRcdFx0JyZ3Y19kcGRfcGFyY2Vsc2hvcF9pc19zbG92ZW5za2FfcG9zdGFfZWxpZ2libGU9JyArXHJcblx0XHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbiB0aGUgcG9wdXBcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBvcGVuUG9wdXAoKSB7XHJcblx0XHRwb3B1cC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuXHJcblx0XHRpZiAoZHBkTWFwV2lkZ2V0RWwgJiYgZHBkTWFwV2lkZ2V0KSB7XHJcblx0XHRcdGNvbnN0IGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0Y2hvc2VuUGFyY2VsU2hvcEhpZGRlblBhcmNlbElkU2VsZWN0b3JcclxuXHRcdFx0KS52YWx1ZTtcclxuXHJcblx0XHRcdGlmIChjaG9zZW5QYXJjZWxTaG9wSWQpIHtcclxuXHRcdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5zZWxlY3RlZFB1ZG9JZCA9IGNob3NlblBhcmNlbFNob3BJZDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmVzZWxlY3Qgb3BlbiBidXR0b24gdG8gZ2V0IHJlZnJlc2hlZCBkYXRhXHJcblx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRtYXBXaWRnZXRQb3B1cE9wZW5CdG5TZWxlY3RvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0Ly8gQWRkIHppcCBpZiBhdmFpbGFibGVcclxuXHRcdFx0Y3VzdG9tZXJaaXAgPSBnZXRDdXN0b21lclppcCgpO1xyXG5cclxuXHRcdFx0aWYgKGN1c3RvbWVyWmlwKSB7XHJcblx0XHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuemlwID0gY3VzdG9tZXJaaXA7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEdldCB0aGUgc2VsZWN0ZWQgY3VzdG9tZXIgY291bnRyeVxyXG5cdFx0XHRjb25zdCBjb3VudHJ5Q29kZSA9IGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcclxuXHRcdFx0XHQnZGF0YS1iYXNlLWNvdW50cnktY29kZSdcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChjb3VudHJ5Q29kZSkge1xyXG5cdFx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLmNvdW50cnkgPSBjb3VudHJ5Q29kZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHdlaWdodCBhbmQgYWxsb3dlZCBsb2NrZXIgdHlwZXMgd2hlbiBvcGVuaW5nIHRoZSBwb3B1cFxyXG5cdFx0XHRjb25zdCBtaW5XZWlnaHRJbktnID0gcGFyc2VJbnQoXHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLW1pbi13ZWlnaHQtaW4ta2cnKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yQWx6YWJveCA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0J2RhdGEtaXMtZWxpZ2libGUtZm9yLWFsemFib3gnXHJcblx0XHRcdFx0KSA9PT0gJ3RydWUnO1xyXG5cdFx0XHRjb25zdCBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3ggPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZShcclxuXHRcdFx0XHRcdCdkYXRhLWlzLWVsaWdpYmxlLWZvci1zbG92ZW5za2EtcG9zdGEtYm94J1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHJcblx0XHRcdGRwZE1hcFdpZGdldC5vcHRpb25zLm1pbldlaWdodEluS2cgPSBtaW5XZWlnaHRJbktnO1xyXG5cclxuXHRcdFx0Y29uc3QgZGlzYWxsb3dTaG9wcyA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LXNob3BzJykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0xvY2tlcnMgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1sb2NrZXJzJykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0RwZFBpY2t1cFN0YXRpb25zID1cclxuXHRcdFx0XHRkcGRNYXBPcGVuV2lkZ2V0TWFwUG9wdXBFbC5nZXRBdHRyaWJ1dGUoXHJcblx0XHRcdFx0XHQnZGF0YS1kaXNhbGxvdy1kcGQtcGlja3VwLXN0YXRpb25zJ1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHRcdFx0Y29uc3QgZGlzYWxsb3dTa1Bvc3QgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1kaXNhbGxvdy1zay1wb3N0JykgPT09XHJcblx0XHRcdFx0J3RydWUnO1xyXG5cdFx0XHRjb25zdCBkaXNhbGxvd0FsemFCb3hlcyA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWRpc2FsbG93LWFsemEtYm94ZXMnKSA9PT1cclxuXHRcdFx0XHQndHJ1ZSc7XHJcblxyXG5cdFx0XHRsZXQgYWxsb3dlZFB1ZG9UeXBlcyA9IFsnc2hvcCcsICdsb2NrZXInXTtcclxuXHRcdFx0aWYgKGRpc2FsbG93U2hvcHMpIHtcclxuXHRcdFx0XHRhbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUgIT09ICdzaG9wJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGRpc2FsbG93TG9ja2Vycykge1xyXG5cdFx0XHRcdGFsbG93ZWRQdWRvVHlwZXMgPSBhbGxvd2VkUHVkb1R5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZSAhPT0gJ2xvY2tlcicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkcGRNYXBXaWRnZXQub3B0aW9ucy5hbGxvd2VkUHVkb1R5cGVzID0gYWxsb3dlZFB1ZG9UeXBlcztcclxuXHJcblx0XHRcdGxldCBhbGxvd2VkTG9ja2VyVHlwZXMgPSBbXHJcblx0XHRcdFx0J2RwZFNrUGlja3VwU3RhdGlvbnMnLFxyXG5cdFx0XHRcdCdza1Bvc3QnLFxyXG5cdFx0XHRcdCdhbHphU2xvdmFraWEnLFxyXG5cdFx0XHRcdCdvdXRzaWRlT2ZTbG92YWtpYScsXHJcblx0XHRcdF07XHJcblxyXG5cdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94IHx8ICFpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gpIHtcclxuXHRcdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JBbHphYm94KSB7XHJcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ2FsemFTbG92YWtpYSdcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIWlzRWxpZ2libGVGb3JTbG92ZW5za2FQb3N0YUJveCkge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdza1Bvc3QnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFkaXNhbGxvd0xvY2tlcnMpIHtcclxuXHRcdFx0XHRpZiAoZGlzYWxsb3dEcGRQaWNrdXBTdGF0aW9ucykge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdkcGRTa1BpY2t1cFN0YXRpb25zJ1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRpc2FsbG93U2tQb3N0KSB7XHJcblx0XHRcdFx0XHRhbGxvd2VkTG9ja2VyVHlwZXMgPSBhbGxvd2VkTG9ja2VyVHlwZXMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQodHlwZSkgPT4gdHlwZSAhPT0gJ3NrUG9zdCdcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkaXNhbGxvd0FsemFCb3hlcykge1xyXG5cdFx0XHRcdFx0YWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KHR5cGUpID0+IHR5cGUgIT09ICdhbHphU2xvdmFraWEnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMuYWxsb3dlZExvY2tlclR5cGVzID0gYWxsb3dlZExvY2tlclR5cGVzO1xyXG5cclxuXHRcdFx0bGV0IHJlcXVpcmVkU2VydmljZXMgPSBbXTtcclxuXHJcblx0XHRcdGNvbnN0IGlzQ29kUmVxdWlyZWQgPVxyXG5cdFx0XHRcdGRwZE1hcE9wZW5XaWRnZXRNYXBQb3B1cEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1jb2QtcmVxdWlyZWQnKSA9PT1cclxuXHRcdFx0XHQndHJ1ZSc7XHJcblx0XHRcdGNvbnN0IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCA9XHJcblx0XHRcdFx0ZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0J2RhdGEtaXMtY2FyZC1wYXltZW50LXJlcXVpcmVkJ1xyXG5cdFx0XHRcdCkgPT09ICd0cnVlJztcclxuXHJcblx0XHRcdGlmIChpc0NvZFJlcXVpcmVkIHx8IGlzQ2FyZFBheW1lbnRSZXF1aXJlZCkge1xyXG5cdFx0XHRcdGlmIChpc0NvZFJlcXVpcmVkKSB7XHJcblx0XHRcdFx0XHRyZXF1aXJlZFNlcnZpY2VzLnB1c2goJ2NvZCcpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGlzQ2FyZFBheW1lbnRSZXF1aXJlZCkge1xyXG5cdFx0XHRcdFx0cmVxdWlyZWRTZXJ2aWNlcy5wdXNoKCdjYXJkUGF5bWVudCcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZHBkTWFwV2lkZ2V0Lm9wdGlvbnMucmVxdWlyZWRTZXJ2aWNlcyA9IHJlcXVpcmVkU2VydmljZXM7XHJcblxyXG5cdFx0XHRkcGRNYXBXaWRnZXRcclxuXHRcdFx0XHQuYXR0YWNoKGRwZE1hcFdpZGdldEVsKVxyXG5cdFx0XHRcdC50aGVuKChwdWRvKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRTZWxlY3RlZFBhcmNlbFNob3Aoe1xyXG5cdFx0XHRcdFx0XHRpZDogcHVkby5pZCxcclxuXHRcdFx0XHRcdFx0bmFtZTogcHVkby5uYW1lLFxyXG5cdFx0XHRcdFx0XHRzdHJlZXQ6IHB1ZG8uc3RyZWV0LFxyXG5cdFx0XHRcdFx0XHRob3VzZW5vOiBwdWRvLmhvdXNlbm8sXHJcblx0XHRcdFx0XHRcdHppcDogcHVkby56aXAsXHJcblx0XHRcdFx0XHRcdGNpdHk6IHB1ZG8uY2l0eSxcclxuXHRcdFx0XHRcdFx0Y291bnRyeUNvZGU6IHB1ZG8uY291bnRyeUNvZGUsXHJcblx0XHRcdFx0XHRcdG1heHdlaWdodDogcHVkby5tYXhXZWlnaHRJbktnLFxyXG5cdFx0XHRcdFx0XHRjb2Q6IHB1ZG8uc2VydmljZXMgJiYgcHVkby5zZXJ2aWNlcy5pbmNsdWRlcygnY29kJykgPyB0cnVlIDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGNhcmQ6XHJcblx0XHRcdFx0XHRcdFx0cHVkby5zZXJ2aWNlcyAmJiBwdWRvLnNlcnZpY2VzLmluY2x1ZGVzKCdjYXJkUGF5bWVudCcpXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRydWVcclxuXHRcdFx0XHRcdFx0XHRcdDogZmFsc2UsXHJcblx0XHRcdFx0XHRcdGlzRWxpZ2libGVGb3JBbHphYm94OiBpc0VsaWdpYmxlRm9yQWx6YWJveCxcclxuXHRcdFx0XHRcdFx0aXNFbGlnaWJsZUZvclNsb3ZlbnNrYVBvc3RhQm94OiBpc0VsaWdpYmxlRm9yU2xvdmVuc2thUG9zdGFCb3gsXHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRjbG9zZVBvcHVwKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuY2F0Y2goKGNvZGUpID0+IHtcclxuXHRcdFx0XHRcdGNsb3NlUG9wdXAoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsb3NlIHRoZSBwb3B1cFxyXG5cdCAqL1xyXG5cdGZ1bmN0aW9uIGNsb3NlUG9wdXAoKSB7XHJcblx0XHRwb3B1cC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiBjbG9zZSBtZXRob2QgZXhpc3RzXHJcblx0XHRpZiAoZHBkTWFwV2lkZ2V0ICYmIGRwZE1hcFdpZGdldC5jbG9zZSkge1xyXG5cdFx0XHRkcGRNYXBXaWRnZXQuY2xvc2UoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrIGlmIGEgcGFyY2VsIHNob3AgaXMgY2hvc2VuXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gaXNQYXJjZWxTaG9wQ2hvc2VuKCkge1xyXG5cdFx0dmFyIGNob3NlblBhcmNlbFNob3BJZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdGNob3NlblBhcmNlbFNob3BIaWRkZW5QYXJjZWxJZFNlbGVjdG9yXHJcblx0XHQpLnZhbHVlO1xyXG5cdFx0cmV0dXJuIGNob3NlblBhcmNlbFNob3BJZCAhPT0gJyc7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgY3VzdG9tZXIgemlwXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gZ2V0Q3VzdG9tZXJaaXAoKSB7XHJcblx0XHQvLyBDaGVjayBpZiBzaGlwIHRvIGRpZmZlcmVudCBhZGRyZXNzIGlzIGNoZWNrZWRcclxuXHRcdGNvbnN0IHNoaXBUb0RpZmZlcmVudEFkZHJlc3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHQnaW5wdXRbbmFtZT1cInNoaXBfdG9fZGlmZmVyZW50X2FkZHJlc3NcIl0nXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmIChzaGlwVG9EaWZmZXJlbnRBZGRyZXNzICYmIHNoaXBUb0RpZmZlcmVudEFkZHJlc3MuY2hlY2tlZCkge1xyXG5cdFx0XHRjb25zdCBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdCdpbnB1dFtuYW1lPVwic2hpcHBpbmdfcG9zdGNvZGVcIl0nXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoc2hpcHBpbmdQb3N0Y29kZUZpZWxkKSB7XHJcblx0XHRcdFx0Y3VzdG9tZXJaaXAgPSBzaGlwcGluZ1Bvc3Rjb2RlRmllbGQudmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjdXN0b21lclppcCkge1xyXG5cdFx0XHRcdHJldHVybiBjdXN0b21lclppcDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGJpbGxpbmdQb3N0Y29kZUZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0J2lucHV0W25hbWU9XCJiaWxsaW5nX3Bvc3Rjb2RlXCJdJ1xyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoYmlsbGluZ1Bvc3Rjb2RlRmllbGQpIHtcclxuXHRcdFx0Y3VzdG9tZXJaaXAgPSBiaWxsaW5nUG9zdGNvZGVGaWVsZC52YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoY3VzdG9tZXJaaXApIHtcclxuXHRcdFx0cmV0dXJuIGN1c3RvbWVyWmlwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1c3RvbWVyWmlwID0gZHBkTWFwT3BlbldpZGdldE1hcFBvcHVwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbWVyLXppcCcpO1xyXG5cclxuXHRcdGlmIChjdXN0b21lclppcCkge1xyXG5cdFx0XHRyZXR1cm4gY3VzdG9tZXJaaXA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICcnO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgZG9jdW1lbnQgaXMgcmVhZHlcclxuXHQgKi9cclxuXHRmdW5jdGlvbiBkb2NSZWFkeShmbikge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnIHx8XHJcblx0XHRcdGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZSdcclxuXHRcdCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KGZuLCAxKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkb2NSZWFkeShmdW5jdGlvbiAoKSB7XHJcblx0XHRpbml0KCk7XHJcblx0fSk7XHJcblxyXG5cdC8vIEFsbG93IHRoZSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20gb3V0c2lkZVxyXG5cdHJldHVybiB7XHJcblx0XHRvcGVuUG9wdXA6IG9wZW5Qb3B1cCxcclxuXHR9O1xyXG59KSgpO1xyXG4iXSwibWFwcGluZ3MiOiI7QUFBQUEsTUFBTSxDQUFDQyxtQkFBbUIsR0FBSSxZQUFZO0VBQ3pDLElBQUlDLHNCQUFzQjtJQUN6QkMsS0FBSztJQUNMQyxZQUFZO0lBQ1pDLCtCQUErQjtJQUMvQkMsNkJBQTZCO0lBQzdCQywrQkFBK0I7SUFDL0JDLG1DQUFtQztJQUNuQ0Msc0NBQXNDO0lBQ3RDQyx5Q0FBeUM7SUFDekNDLHdDQUF3QztJQUN4Q0MsMENBQTBDO0lBQzFDQyx3Q0FBd0M7SUFDeENDLHVDQUF1QztJQUN2Q0MsK0NBQStDO0lBQy9DQyxjQUFjO0lBQ2RDLFdBQVc7SUFDWEMsU0FBUztJQUNUQyxlQUFlO0lBQ2ZDLGdCQUFnQixHQUFHLEtBQUs7RUFFekIsU0FBU0MsSUFBSUEsQ0FBQSxFQUFHO0lBQ2ZmLDZCQUE2QixHQUM1Qiw4Q0FBOEM7SUFFL0NKLHNCQUFzQixHQUFHLHFDQUFxQztJQUU5REcsK0JBQStCLEdBQzlCLCtDQUErQztJQUVoREUsK0JBQStCLEdBQUcsbUNBQW1DO0lBQ3JFQyxtQ0FBbUMsR0FDbEMsa0RBQWtEO0lBQ25EQyxzQ0FBc0MsR0FDckMseUNBQXlDO0lBQzFDQyx5Q0FBeUMsR0FDeEMsNkNBQTZDO0lBQzlDQyx3Q0FBd0MsR0FDdkMsMkNBQTJDO0lBQzVDQywwQ0FBMEMsR0FDekMsNkNBQTZDO0lBQzlDQyx3Q0FBd0MsR0FDdkMsMkNBQTJDO0lBQzVDQyx1Q0FBdUMsR0FDdEMsMENBQTBDO0lBQzNDQywrQ0FBK0MsR0FDOUMsbURBQW1EO0lBRXBEWixLQUFLLEdBQUdtQixRQUFRLENBQUNDLGFBQWEsQ0FBQ3JCLHNCQUFzQixDQUFDOztJQUV0RDtBQUNGO0FBQ0E7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QUlBLFlBQVksQ0FBQzRILEtBQUssRUFBRTtNQUN2QzVILFlBQVksQ0FBQzRILEtBQUssQ0FBQyxDQUFDO0lBQ3JCO0VBQ0Q7O0VBRUE7QUFDRDtBQUNBO0VBQ0MsU0FBUzdGLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQzdCLElBQUlrRSxrQkFBa0IsR0FBRy9FLFFBQVEsQ0FBQ0MsYUFBYSxDQUM5Q2Qsc0NBQ0QsQ0FBQyxDQUFDeUUsS0FBSztJQUNQLE9BQU9tQixrQkFBa0IsS0FBSyxFQUFFO0VBQ2pDOztFQUVBO0FBQ0Q7QUFDQTtFQUNDLFNBQVNHLGNBQWNBLENBQUEsRUFBRztJQUN6QjtJQUNBLElBQU15QixzQkFBc0IsR0FBRzNHLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwRCx5Q0FDRCxDQUFDO0lBRUQsSUFBSTBHLHNCQUFzQixJQUFJQSxzQkFBc0IsQ0FBQ0MsT0FBTyxFQUFFO01BQzdELElBQU1DLHFCQUFxQixHQUFHN0csUUFBUSxDQUFDQyxhQUFhLENBQ25ELGlDQUNELENBQUM7TUFFRCxJQUFJNEcscUJBQXFCLEVBQUU7UUFDMUJsSCxXQUFXLEdBQUdrSCxxQkFBcUIsQ0FBQ2pELEtBQUs7TUFDMUM7TUFFQSxJQUFJakUsV0FBVyxFQUFFO1FBQ2hCLE9BQU9BLFdBQVc7TUFDbkI7SUFDRDtJQUVBLElBQU1tSCxvQkFBb0IsR0FBRzlHLFFBQVEsQ0FBQ0MsYUFBYSxDQUNsRCxnQ0FDRCxDQUFDO0lBRUQsSUFBSTZHLG9CQUFvQixFQUFFO01BQ3pCbkgsV0FBVyxHQUFHbUgsb0JBQW9CLENBQUNsRCxLQUFLO0lBQ3pDO0lBRUEsSUFBSWpFLFdBQVcsRUFBRTtNQUNoQixPQUFPQSxXQUFXO0lBQ25CO0lBRUFBLFdBQVcsR0FBR1ksMEJBQTBCLENBQUNXLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztJQUUxRSxJQUFJdkIsV0FBVyxFQUFFO01BQ2hCLE9BQU9BLFdBQVc7SUFDbkI7SUFFQSxPQUFPLEVBQUU7RUFDVjs7RUFFQTtBQUNEO0FBQ0E7RUFDQyxTQUFTb0gsUUFBUUEsQ0FBQ0MsRUFBRSxFQUFFO0lBQ3JCLElBQ0NoSCxRQUFRLENBQUM0RSxVQUFVLEtBQUssVUFBVSxJQUNsQzVFLFFBQVEsQ0FBQzRFLFVBQVUsS0FBSyxhQUFhLEVBQ3BDO01BQ0RxQyxVQUFVLENBQUNELEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxNQUFNO01BQ05oSCxRQUFRLENBQUNFLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFOEcsRUFBRSxDQUFDO0lBQ2xEO0VBQ0Q7RUFFQUQsUUFBUSxDQUFDLFlBQVk7SUFDcEJoSCxJQUFJLENBQUMsQ0FBQztFQUNQLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU87SUFDTlcsU0FBUyxFQUFFQTtFQUNaLENBQUM7QUFDRixDQUFDLENBQUUsQ0FBQyIsImlnbm9yZUxpc3QiOltdLCJmaWxlIjoiLi9hc3NldHMvc2NyaXB0cy9kcGQtcGFyY2Vsc2hvcC1tYXAtd2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/scripts/dpd-parcelshop-map-widget.js\n");
    1919
    2020/***/ })
  • wc-dpd/trunk/readme.txt

    r3292802 r3339385  
    44Donate link: https://platobnebrany.sk/
    55Requires at least: 5.3
    6 Tested up to: 6.8.1
     6Tested up to: 6.8.2
    77Requires PHP: 7.4
    8 Stable tag: 8.0.2
     8Stable tag: 8.1.0
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    6262
    6363== Changelog ==
     64
     65= 8.1.0 =
     66* Fixed parcel shop validation for WooCommerce Blocks checkout
     67* Added filter 'wc_dpd_is_cart_or_checkout_page' for custom checkout page detection
     68* Improved WooCommerce Blocks compatibility for parcel shop selection validation
     69* Updated free shipping description hint
    6470
    6571= 8.0.2 =
  • wc-dpd/trunk/vendor/composer/installed.json

    r3254821 r3339385  
    33        {
    44            "name": "league/iso3166",
    5             "version": "4.3.2",
    6             "version_normalized": "4.3.2.0",
     5            "version": "4.3.3",
     6            "version_normalized": "4.3.3.0",
    77            "source": {
    88                "type": "git",
    99                "url": "https://github.com/alcohol/iso3166.git",
    10                 "reference": "5133fed7d54728222f4058702487dccedda20472"
     10                "reference": "3f692113a1c07859ec69303a0127b43da8a66768"
    1111            },
    1212            "dist": {
    1313                "type": "zip",
    14                 "url": "https://api.github.com/repos/alcohol/iso3166/zipball/5133fed7d54728222f4058702487dccedda20472",
    15                 "reference": "5133fed7d54728222f4058702487dccedda20472",
     14                "url": "https://api.github.com/repos/alcohol/iso3166/zipball/3f692113a1c07859ec69303a0127b43da8a66768",
     15                "reference": "3f692113a1c07859ec69303a0127b43da8a66768",
    1616                "shasum": ""
    1717            },
     
    2626                "phpunit/phpunit": "^9.6.21"
    2727            },
    28             "time": "2024-10-10T07:39:24+00:00",
     28            "time": "2025-06-05T08:06:30+00:00",
    2929            "type": "library",
    3030            "extra": {
  • wc-dpd/trunk/vendor/composer/installed.php

    r3254821 r3339385  
    1212    'versions' => array(
    1313        'league/iso3166' => array(
    14             'pretty_version' => '4.3.2',
    15             'version' => '4.3.2.0',
    16             'reference' => '5133fed7d54728222f4058702487dccedda20472',
     14            'pretty_version' => '4.3.3',
     15            'version' => '4.3.3.0',
     16            'reference' => '3f692113a1c07859ec69303a0127b43da8a66768',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../league/iso3166',
  • wc-dpd/trunk/vendor/league/iso3166/src/Guards.php

    r2796559 r3339385  
    1616final class Guards
    1717{
     18    /**
     19     * Assert that input is not an empty string.
     20     *
     21     * @throws \League\ISO3166\Exception\DomainException if input is an empty string
     22     */
     23    public static function guardAgainstInvalidName(string $name): void
     24    {
     25        if ('' === trim($name)) {
     26            throw new DomainException('Expected string, got empty string');
     27        }
     28    }
     29
    1830    /**
    1931     * Assert that input looks like an alpha2 key.
  • wc-dpd/trunk/vendor/league/iso3166/src/ISO3166.php

    r3254821 r3339385  
    4444    public function name(string $name): array
    4545    {
     46        Guards::guardAgainstInvalidName($name);
     47
    4648        return $this->lookup(self::KEY_NAME, $name);
    4749    }
     
    8284    public function exactName(string $name): array
    8385    {
     86        Guards::guardAgainstInvalidName($name);
     87       
    8488        $value = mb_strtolower($name);
    8589
     
    22602264        ],
    22612265        [
    2262             'name' => 'Turkey',
     2266            'name' => 'Türkiye',
    22632267            'alpha2' => 'TR',
    22642268            'alpha3' => 'TUR',
  • wc-dpd/trunk/vendor/league/iso3166/src/ISO3166DataValidator.php

    r2796559 r3339385  
    3737    private function assertEntryHasRequiredKeys(array $entry): void
    3838    {
     39        if (!isset($entry[ISO3166::KEY_NAME])) {
     40            throw new DomainException('Each data entry must have a name key.');
     41        }
     42
     43        Guards::guardAgainstInvalidName($entry[ISO3166::KEY_NAME]);
     44
    3945        if (!isset($entry[ISO3166::KEY_ALPHA2])) {
    40             throw new DomainException('Each data entry must have a valid alpha2 key.');
     46            throw new DomainException('Each data entry must have a alpha2 key.');
    4147        }
    4248
     
    4450
    4551        if (!isset($entry[ISO3166::KEY_ALPHA3])) {
    46             throw new DomainException('Each data entry must have a valid alpha3 key.');
     52            throw new DomainException('Each data entry must have a alpha3 key.');
    4753        }
    4854
     
    5056
    5157        if (!isset($entry[ISO3166::KEY_NUMERIC])) {
    52             throw new DomainException('Each data entry must have a valid numeric key.');
     58            throw new DomainException('Each data entry must have a numeric key.');
    5359        }
    5460
  • wc-dpd/trunk/vendor/league/iso3166/src/ISO3166WithAliases.php

    r3254821 r3339385  
    1616    private ISO3166DataProvider $source;
    1717
     18    /** @type array<string, string> */
     19    public const aliases = [
     20        'Bolivia' => 'Bolivia (Plurinational State of)',
     21        'Bolivia, Plurinational State of' => 'Bolivia (Plurinational State of)',
     22        'Congo-Kinshasa' => 'Congo (Democratic Republic of the)',
     23        'Congo, Democratic Republic of the' => 'Congo (Democratic Republic of the)',
     24        'Czech Republic' => 'Czechia',
     25        'Iran' => 'Iran (Islamic Republic of)',
     26        'North Korea' => 'Korea (Democratic People\'s Republic of)',
     27        'South Korea' => 'Korea (Republic of)',
     28        'Laos' => 'Lao People\'s Democratic Republic',
     29        'Micronesia' => 'Micronesia (Federated States of)',
     30        'Moldova' => 'Moldova (Republic of)',
     31        'Palestine' => 'Palestine, State of',
     32        'Russia' => 'Russian Federation',
     33        'Saint Martin' => 'Saint Martin (French part)',
     34        'Sint Maarten' => 'Sint Maarten (Dutch part)',
     35        'Taiwan' => 'Taiwan (Province of China)',
     36        'Tanzania' => 'Tanzania, United Republic of',
     37        'United Kingdom' => 'United Kingdom of Great Britain and Northern Ireland',
     38        'United States' => 'United States of America',
     39        'USA' => 'United States of America',
     40        'Venezuela' => 'Venezuela (Bolivarian Republic of)',
     41        'Vietnam' => 'Viet Nam',
     42    ];
     43
    1844    public function __construct(ISO3166DataProvider $iso3166)
    1945    {
     
    2349    public function name(string $name): array
    2450    {
    25         $aliases = [
    26             'Bolivia' => 'Bolivia (Plurinational State of)',
    27             'Bolivia, Plurinational State of' => 'Bolivia (Plurinational State of)',
    28             'Congo-Kinshasa' => 'Congo (Democratic Republic of the)',
    29             'Congo, Democratic Republic of the' => 'Congo (Democratic Republic of the)',
    30             'Czech Republic' => 'Czechia',
    31             'Iran' => 'Iran (Islamic Republic of)',
    32             'North Korea' => 'Korea (Democratic People\'s Republic of)',
    33             'South Korea' => 'Korea (Republic of)',
    34             'Laos' => 'Lao People\'s Democratic Republic',
    35             'Micronesia' => 'Micronesia (Federated States of)',
    36             'Moldova' => 'Moldova (Republic of)',
    37             'Palestine' => 'Palestine, State of',
    38             'Russia' => 'Russian Federation',
    39             'Saint Martin' => 'Saint Martin (French part)',
    40             'Sint Maarten' => 'Sint Maarten (Dutch part)',
    41             'Taiwan' => 'Taiwan (Province of China)',
    42             'Tanzania' => 'Tanzania, United Republic of',
    43             'United Kingdom' => 'United Kingdom of Great Britain and Northern Ireland',
    44             'United States' => 'United States of America',
    45             'Venezuela' => 'Venezuela (Bolivarian Republic of)',
    46             'Vietnam' => 'Viet Nam',
    47         ];
    48 
    49         foreach ($aliases as $alias => $original) {
     51        foreach (self::aliases as $alias => $original) {
    5052            if (0 === strcasecmp($alias, $name)) {
    5153                $name = $original;
  • wc-dpd/trunk/wc-dpd.php

    r3292802 r3339385  
    44 * Plugin Name: DPD SK for WooCommerce
    55 * Description: DPD SK plugin for WooCommerce which exports orders to the DPD through their API
    6  * Version: 8.0.2
     6 * Version: 8.1.0
    77 * Author: Webikon
    88 * Author URI: https://www.webikon.sk
     
    1212 * Domain Path: /languages
    1313 * Requires at least: 5.3
    14  * Tested up to: 6.8.1
     14 * Tested up to: 6.8.2
    1515 * Requires PHP: 7.4
    1616 * WC requires at least: 7.0
    17  * WC tested up to: 9.8.5
     17 * WC tested up to: 10.0.4
    1818 */
    1919
Note: See TracChangeset for help on using the changeset viewer.